在 JavaFX 中,我有一个 Controller 类,它从 FXML 文件中提取控制组件,并具有作用于该组件的方法,如此处的标签所示:
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 控制器中的标签。我该怎么做?
注意:我故意使我的代码和问题变得通用,这样它可能会帮助其他人解决同样的问题。
你打电话Platform.runLater(可运行) http://docs.oracle.com/javafx/2/api/javafx/application/Platform.html#runLater%28java.lang.Runnable%29脱离 JavaFX UI 线程来执行可更新 JavaFX UI 线程上活动 JavaFX 场景图元素的可运行对象。
还评论JavaFX 中的并发 http://docs.oracle.com/javafx/2/threads/jfxpub-threads.htm,与Task http://docs.oracle.com/javafx/2/api/javafx/concurrent/Task.html and Service http://docs.oracle.com/javafx/2/api/javafx/concurrent/Service.html类,看看这是否不是更适合您的特定任务的解决方案。
有关更多信息,请参阅:
-
JavaFX Platform.runLater 的使用以及从不同线程访问 UI https://stackoverflow.com/questions/15160410/usage-of-javafx-platform-runlater-and-access-to-ui-from-a-different-thread.
- JavaFX 中的 Platform.runLater 和任务 https://stackoverflow.com/questions/13784333/platform-runlater-and-task-javafx
- JavaFx 对 SwingUtilities.invokeLater 的响应 https://stackoverflow.com/questions/12984310/javafx-response-to-swingutilities-invokelater
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)