2016-05-17 90 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應用程序中創建進度指示器。 我想從數據庫加載數據或將數據保存到數據庫時顯示進度指示器。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。這就是爲什麼不顯示(或顯示了一個很短的時間),你的窗口的原因

你可以打開進度條和myController.setDisable(true);後,您可以在任務返回的特定值(使用Task<Boolean>例如)等。

方法isDone()會告訴你什麼時候你的任務已經結束,什麼時候打電話hideProgressIndicator

另一種選擇是從您的任務本身執行UI修改,請參閱此處的示例Task