在后台任务javafx中执行进度指示器

时间:2016-03-14 16:19:44

标签: java multithreading javafx progress-indicator

在执行任务期间,进度指示器平稳运行,但当任务结束时,进度指示器继续转动。我希望此任务结束时进度指示器停止。这是我的代码

open('Herald500_200{0}.json'.format(i)) 

并且有我的任务。

for year in range(2005, 2016):  # note the 2016 here - the upper bound is non-inclusive
    df = pandas.DataFrame([json.loads(l) for l in open('Herald500_%d.json' % year)])

1 个答案:

答案 0 :(得分:1)

您无法从后台线程更改UI,因此行

progressInd.progressProperty().unbind();
progressInd.setProgress(task.getProgress());
nextButton.setDisable(false);
不应该在call()方法中执行

相反,你应该做

nextButton.setDisable(true);
task = createWorker();          
progressInd.progressProperty().bind(task.progressProperty());
task.setOnSucceeded(e -> {
    progressInd.progressProperty().unbind();
    progressInd.setProgress(1); // mark as complete...
    nextButton.setDisable(false);
});
// always good practice to (at a minimum) log exceptions if they occur:
task.setOnFailed(e -> task.getException().printStackTrace());
th = new Thread(task);          
th.start();