我在执行后台任务时让JavaFX UI保持活动状态时遇到问题。 我已经设置了这个非常简单的代码 -
@FXML
ProgressBar prgbProgress;
@FXML
private void onClick(ActionEvent event) {
Task <Void> t = new Task <Void> () {
@Override
protected Void call() throws Exception {
for (int i = 0; i < 10; i++) {
updateProgress(i, 9);
Thread.sleep(1000);
}
return null;
}
};
prgbProgress.progressProperty().bind(t.progressProperty());
new Thread(t).run();
}
我期望发生的事情是每隔约1秒更新一次进度条,直到任务完成。相反,UI完全冻结10秒钟,之后进度条显示完成。 只是为了说清楚 - 问题不仅仅是所有更新最终一次出现,而且在此之前UI完全没有响应。
我已经阅读了关于此主题的任何其他问题,但无法找到答案。我做错了什么?
感谢。
答案 0 :(得分:4)
使用 start()代替 run()
@FXML
ProgressBar prgbProgress;
@FXML
private void onClick(ActionEvent event) {
Task <Void> t = new Task <Void> () {
@Override
protected Void call() throws Exception {
for (int i = 0; i < 10; i++) {
updateProgress(i, 9);
Thread.sleep(1000);
}
return null;
}
};
prgbProgress.progressProperty().bind(t.progressProperty());
//new Thread(t).run(); // wrong
new Thread(t).start(); // right
}