JavaFX:从线程更新控制器类中的 UI 元素
Posted
技术标签:
【中文标题】JavaFX:从线程更新控制器类中的 UI 元素【英文标题】:JavaFX: Updating UI elements in a Controller class from a Thread 【发布时间】:2013-07-26 06:22:33 【问题描述】:在 JavaFX 中,我有一个 Controller 类,它从 FXML 文件中提取控制组件并具有作用于该组件的方法,此处显示为 Label:
public class ViewController
@FXML private Label labelStatus;
public void updateStatusLabel(String label)
labelStatus.setText("Status: " + label);
我还有一个带有 run() 方法的 Java 线程,如下所示:
public class Server extends Thread
public void run()
super.run();
此服务器线程处理我的特定应用程序所需的一些套接字连接。建立连接后(在 run() 方法中——未显示),我需要更新 FXML 控制器中的标签。我该怎么做?
注意:我特意将我的代码和问题进行了通用化,这样可以帮助其他有同样问题的人。
【问题讨论】:
【参考方案1】:您从 JavaFX UI 线程调用 Platform.runLater(runnable) 以执行可更新 JavaFX UI 线程上活动 JavaFX 场景图元素的可运行文件。
还可以查看 Concurrency in JavaFX 以及 Task 和 Service 类,看看这是否不是更适合您的特定任务的解决方案。
更多信息,请参见:
Usage of JavaFX Platform.runLater and access to UI from a different thread。 Platform.runLater and Task in JavaFX JavaFx response to SwingUtilities.invokeLater【讨论】:
以上是关于JavaFX:从线程更新控制器类中的 UI 元素的主要内容,如果未能解决你的问题,请参考以下文章
JavaFX 使用 Platform.runLater 从另一个线程更新 TextArea
Javafx - 从 java 类更新 UI 中的进度指示器
JavaFX UI 在事件侦听器中的 JavaFX 应用程序线程中冻结,但可与 Platform.runLater 一起使用