在java fx控制器中,我有两个版本的代码,只需按一个按钮就可以在标签上设置文本(这只是一个示例,但可以考虑任何其他的ui修改)...
第一个版本使用Platform.runLater:
Platform.runLater(() -> {
status.setText("");
statusIndicator.setVisible(false);
});
另一个只是在普通的线程中修改它:
status.setText("");
statusIndicator.setVisible(false);
两者都工作得非常好,但我知道到目前为止只有将一些runnable传递给Platform.runLater会保持执行顺序。
使用Platform.runLater还有其他任何显着差异或动机吗?
答案 0 :(得分:4)
JavaFX只有一个UI线程
JavaFX场景图,表示图形用户界面 JavaFX应用程序,不是线程安全的,只能访问 并从UI线程修改,也称为JavaFX应用程序 螺纹
如果您有长时间运行的任务,您将需要在后台线程上运行它们,并且在完成此类线程之后,您可能希望将结果更新回UI。在这种情况下,您使用Platform.runlater()
包围的更新。使用Platform.runLater在您的代码周围使您的代码能够与JavaFX Application线程进行通信。
来到你的问题:
使用Platform.runLater还有其他任何显着差异或动机吗?
我希望大部分内容已经回答,只是添加
1。 如果您已经在JavaFX应用程序线程
,则不必使用Platform.runlater()2。正如Platform.runLater() doc所说
将来某个未指定的时间在JavaFX应用程序线程上运行指定的Runnable
我们不确定何时进行更新,这取决于等待处理的更新数量。如果等待在UI线程上处理大量更新,则可能需要一些时间(这种情况通常不会发生)