JavaFX UI在新线程中执行任务时冻结

我在执行后台任务时让JavaFX UI保持活动状态时遇到问题。 我已经设置了这个非常简单的代码 –

@FXML ProgressBar prgbProgress; @FXML private void onClick(ActionEvent event) { Task  t = new Task  () { @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完全没有响应。

我已经阅读了关于这个主题的任何其他问题,但找不到答案。 我究竟做错了什么?

谢谢。

使用start()而不是run()

 @FXML ProgressBar prgbProgress; @FXML private void onClick(ActionEvent event) { Task  t = new Task  () { @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 }