2016-05-17 20 views
0
private Popup popupProgressIndicator; 
public void showProgressIndicator(ScreensController myController) { 
     if (popupProgressIndicator == null) { 
      ProgressIndicator indicator = new ProgressIndicator(-1.0); 
      indicator.setPrefHeight(200); 
      indicator.setPrefWidth(200); 
      indicator.setLayoutX(0); 
      indicator.setLayoutY(0); 
      popupProgressIndicator = new Popup(); 
      popupProgressIndicator.getContent().add(indicator); 
     } 
     if (!popupProgressIndicator.isShowing()) { 
      popupProgressIndicator.show(primaryStage); 
      popupProgressIndicator.centerOnScreen(); 
     } 
     myController.setDisable(true); 
    } 
    public void hideProgressIndicator(ScreensController myController) { 
     if (popupProgressIndicator.isShowing()) 
      popupProgressIndicator.hide(); 
     myController.setDisable(false); 
    } 

こんにちは私は上記のコードをjavafxアプリケーションで進捗インジケータを作成するために使用しています。 dbからデータをロードしたり、dbにデータを保存したりする際に進行状況インジケータを表示したい。javafx dbロード進捗インジケータ

@FXML 
private void addDesignationSelect() { 
    showProgressIndicator(myController); 
    Task<Void> task = new Task<Void>() { 
     @Override 
     protected Void call() throws Exception { 
      Platform.runLater(new Runnable() { 
       @Override 
       public void run() { 
        // doing some heavy db process 
       } 
      }); 
      return null; 
     } 
     @Override 
     protected void succeeded() { 
      hideProgressIndicator(myController); 
     } 
     @Override 
     protected void failed() { 
      super.failed(); 
      hideProgressIndicator(myController); 
     } 
    }; 
    new Thread(task).start(); 
} 

タスクを使用して進行状況バーをロードしていますが、進行状況バーが表示されていません。私が間違っていることは何ですか?

答えて

0

スレッド/タスクを開始する前に、showProgressIndicatorメソッドを表示してください。これはあなたの窓は

示す(または非常に短い時間のために示した)されていない理由あなたはプログレスバーを開くことができ、タスクが特定の値(例えば、使用Task<Boolean>)を返す場合myController.setDisable(true);した後、あなたは待つことができる理由です。

isDone()の方法では、タスクが終了したときと、いつhideProgressIndicatorに電話するのかがわかります。

もう1つの選択肢は、タスク自体からUI変更を行うことです。ここの例を参照してください。Task

関連する問題