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

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

第一个版本使用Platform.runLater:

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

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

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

两者都工作得很好,只有我知道到目前为止的差异是将一些runnable传递给Platform.runLater将保持执行顺序。

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

JavaFX只有一个UI线程

来自Docs

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

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

来到你的问题:

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

我希望大部分内容已经得到解答,只是补充一下

1。 如果您已经在JavaFX Application线程上,则不必使用Platform.runlater()

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

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

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