当前位置: 首页 > 面试题库 >

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

桑宇
2023-03-14
问题内容

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

第一个版本使用Platform.runLater:

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

另一个仅在普通线程中对其进行修改:

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

两者都工作得很好,到目前为止,我所知道的唯一区别是将一些可运行项传递给Platform.runLater将保持执行顺序。

使用Platform.runLater是否有其他显着差异或动机?


问题答案:

JavaFX只有一个UI线程

从文档

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

如果您有 长期运行的任务
,则需要在后台线程上运行它们,并在完成这些线程后,将结果更新回UI。在这种情况下,您可以使用括起来的更新Platform.runlater()。用Platform.runLater包围您的代码,使您的代码可以与JavaFX
Application线程进行通信

来到您的问题:

使用Platform.runLater是否有其他显着差异或动机?

我希望其中大部分已经回答,只是为了补充

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

2。正如Platform.runLater()文件所说

将来在某些未指定的时间在JavaFX Application Thread上运行指定的Runnable

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



 类似资料:
  • 我是JavaFx新手,尝试用三个StackPane构建下面的屏幕,可以根据窗口大小动态地增加和缩小宽度和高度。我尝试了不同的方法,但没能做到这一点。我还尝试使用锚烷约束。这是我试图实现的图像和相应的FXML。以下是我在这些窗格之间寻找的约束条件 左窗格具有最大宽度(300px)和最小150 左右之间的距离(2)堆栈窗格应保持不变 右顶部和底部堆栈窗格之间的距离应保持不变 左顶部堆栈窗格的最大高度为

  • 问题内容: 我试图读取Golang中的JSON文件,修改此JSON文件,然后创建一个新的JSON文件/在此JSON文件上进行覆盖。我在网上看到了几个示例,但似乎无法将两个和两个放在一起以获得所需的结果。我尝试只在GO中创建自己的JSON str并对其进行修改,但仍然失败。 我已经尝试过几次读取文件,以下是我的最佳尝试: 这是一个示例输出: 我只是对如何修改我想要的内容感到困惑,特别是上述示例输出的

  • 问题内容: 我知道您可以使用Newtonsoft轻松地做到这一点。但是,当我使用.NET Core 3.0时,我正在尝试使用新方法与JSON文件进行交互,即,并且我拒绝相信我要做的一切都那么困难! 我的应用程序需要列出尚未添加到我的数据库中的用户。为了获取所有用户的完整列表,该应用程序从Web API检索JSON字符串。现在,我需要循环浏览这些用户中的每一个,并检查是否已将它们添加到我的应用程序中

  • 我正在做一个个人图形编辑器项目,我想为自动代码生成创建类似流程图的图形。我的第一个想法是和,但结果发现太复杂了,因为我必须手动绘制所有内容。所以我已经切换到。 基本上,每个节点都是一个,上面有其他标准的ui组件,如,等。因为每个节点都代表一个程序函数,所以我想使用这些ui组件来选择函数的输入。 我正在用做一些实验,背景是一个,上面有一些s: 节点放置在中,因为它提供组件的绝对定位: 然后我在这里发

  • 本文向大家介绍Android ListView UI组件使用说明,包括了Android ListView UI组件使用说明的使用技巧和注意事项,需要的朋友参考一下 一、ListView 该组件是android中最常用的一个UI组件,用于实现在屏幕上显示​多个内容,以便于我们用手指来回翻转。 先在layout中进行布局我们的组件 对该组件注册一个list_view的ID(这个R中的语句是运行时会自动

  • 问题内容: 我正在尝试读取HTML文件,并添加指向某些文本的链接: 例如:我想添加链接到“ Campaign0”文本。: 要添加的链接: 我需要一个Java程序来修改html,以在“ Campaign0 ” 上添加超链接。 我如何用Jsoup做到这一点? 我用JSoup尝试了这个: 这样对吗 ??它不起作用:( 简而言之 :是否有类似-> 在Java代码中使用JSoup或任何技术? 问题答案: 您