Java FX使用/不使用Platform.runLater修改UI组件状态

时间:2014-09-24 08:46:13

标签: java javafx

在java fx控制器中,我有两个版本的代码,只需按一个按钮就可以在标签上设置文本(这只是一个示例,但可以考虑任何其他的ui修改)...

第一个版本使用Platform.runLater:

Platform.runLater(() -> {
   status.setText("");
   statusIndicator.setVisible(false);
});

另一个只是在普通的线程中修改它:

status.setText("");
statusIndicator.setVisible(false);

两者都工作得非常好,但我知道到目前为止只有将一些runnable传递给Platform.runLater会保持执行顺序。

使用Platform.runLater还有其他任何显着差异或动机吗?

1 个答案:

答案 0 :(得分:4)

JavaFX只有一个UI线程

From Docs

  

JavaFX场景图,表示图形用户界面   JavaFX应用程序,不是线程安全的,只能访问   并从UI线程修改,也称为JavaFX应用程序   螺纹

如果您有长时间运行的任务,您将需要在后台线程上运行它们,并且在完成此类线程之后,您可能希望将结果更新回UI。在这种情况下,您使用Platform.runlater()包围的更新。使用Platform.runLater在您的代码周围使您的代码能够与JavaFX Application线程进行通信。

来到你的问题:

  

使用Platform.runLater还有其他任何显着差异或动机吗?

我希望大部分内容已经回答,只是添加

1。 如果您已经在JavaFX应用程序线程

,则不必使用Platform.runlater()

2。正如Platform.runLater() doc所说

  

将来某个未指定的时间在JavaFX应用程序线程上运行指定的Runnable

我们不确定何时进行更新,这取决于等待处理的更新数量。如果等待在UI线程上处理大量更新,则可能需要一些时间(这种情况通常不会发生)