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 app中创建进度指示器。 我想在从db加载数据或将数据保存到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();
}
我使用了Task来加载进度条,但它没有显示进度条。我做错了什么?
答案 0 :(得分:0)
在开始执行线程/任务之前,调用show your method showProgressIndicator
。这就是为什么你的窗口没有显示(或显示很短的时间)的原因
您可以打开progressBar,在myController.setDisable(true);
之后,您可以等待任务返回特定值(例如,使用Task<Boolean>
)。
方法isDone()
会告诉您任务何时结束以及何时致电hideProgressIndicator
。
另一种选择是从您的任务本身执行UI修改,请参阅此处的示例Task