我有java fx应用程序,有很多tableviews。我们如何在javafx tableview中知道有数据绑定,它在两个方向上工作。因此,当我的应用程序使用tableviws UI中的数据进行计算时,冻结了,因为我的应用程序不断更新tableviews(ObservableList)中的数据。我确实试过使用Platform.RunLater,但它并没有帮助我。有什么想法吗?
答案 0 :(得分:1)
Platform.runLater
本质上延迟你的runnable - 但它将再次在UI线程上运行,因此在执行期间阻止每个用户输入。
解决方案很简单,use a worker thread:
Task task = new Task<Void>() {
@Override public Void call() {
static final int max = 1000000;
for (int i=1; i<=max; i++) {
if (isCancelled()) {
break;
}
updateProgress(i, max);
}
return null;
}
};
ProgressBar bar = new ProgressBar();
bar.progressProperty().bind(task.progressProperty());
new Thread(task).start();
虽然建议使用ExecutorService
类,因为它允许更加可控的行为:http://java-buddy.blogspot.de/2012/06/example-of-using-executorservice.html