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

Java FX使用/不使用Platform.runLater修改UI组件状态,java,javafx,Java,Javafx,在JavaFXController中,我有两个版本的代码,当按下按钮时,只需在标签上设置一个文本。这只是一个示例,但任何其他ui修改都可以考虑 第一个版本使用Platform.runLater: Platform.runLater(() -> { status.setText(""); statusIndicator.setVisible(false); }); 另一个只是在普通线程中修改它: status.setText(""); statusIndicator.setVi

在JavaFXController中,我有两个版本的代码,当按下按钮时,只需在标签上设置一个文本。这只是一个示例,但任何其他ui修改都可以考虑

第一个版本使用Platform.runLater:

Platform.runLater(() -> {
   status.setText("");
   statusIndicator.setVisible(false);
});
另一个只是在普通线程中修改它:

status.setText("");
statusIndicator.setVisible(false);
两者都工作得非常好,到目前为止我所知道的唯一区别是将一些runnable传递给Platform.runLater将保持执行顺序

使用Platform.runLater还有其他显著的区别或动机吗?

JavaFX只有一个UI线程

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

如果您有长时间运行的任务,您将希望在后台线程上运行它们,并且在这些线程完成后,您将希望将结果更新回UI。在这样的场景下,您使用由Platform.runlater包围的更新。使用Platform.runLater包围代码可以使代码与JavaFX应用程序线程通信

关于你的问题:

使用Platform.runLater是否还有其他重要区别或动机

我希望大部分问题已经得到回答,只是补充一下

一,。如果您已经在JavaFX应用程序线程上,则不必使用Platform.runlater

二,。正如上面所说的

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


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

所以当我在控制器中时,从UI交互触发的是FX线程?我可以不使用Platform.runlater吗?在控制器的长操作情况下,我需要执行单独的操作执行,并使用Platform.runlater更新ui?如果您没有在控制器中创建任何线程,则不使用它是安全的!谢谢我不知道控制器方法在那个单一UI线程中运行,现在我将把所有长操作移到异步执行。。。