JavaFX:从Thread更新Controller类中的UI元素

Tar*_*que 7 java user-interface multithreading javafx

在JavaFX中,我有一个Controller类,它从FXML文件中提取控制组件,并具有作用于组件的方法,在这里用Label显示:

public class ViewController {
    @FXML private Label labelStatus;

    public void updateStatusLabel(String label) {
        labelStatus.setText("Status: " + label);
    }    
}
Run Code Online (Sandbox Code Playgroud)

我还有一个带有run()方法的Java Thread,如下所示:

public class Server extends Thread {

    public void run() {
        super.run();    
    }
}
Run Code Online (Sandbox Code Playgroud)

此服务器线程处理我的特定应用程序所需的一些套接字连接.建立连接后(在run()方法中 - 未显示),我需要更新FXML控制器中的Label.我该怎么做?

注意:我故意使我的代码和问题一般,所以它可以帮助其他人遇到同样的问题.

jew*_*sea 5

从JavaFX UI线程调用Platform.runLater(runnable)来执行runnable,该runnable更新JavaFX UI线程上活动JavaFX Scene Graph的元素.

还要查看JavaFX中的Concurrency,使用TaskService类,看看这是否是对您的特定任务更合适的解决方案.

有关更多信息,请参阅: