JavaFx对SwingUtilities.invokeLater的响应

JavaFx对SwingUtilities.invokeLater的响应,java,swing,javafx,event-dispatch-thread,mixing,Java,Swing,Javafx,Event Dispatch Thread,Mixing,所以我知道JavaFx在使用线程时更新GUI的方法称为Task,但是代码是否以类似的方式工作,或者是否存在任何差异。让我给你举个挥杆的例子: GUI之外作为线程运行的另一个类 public void run(){ while (socket.isConnected()) { String x = input.next(); System.out.println(x); mg.updateChat(x) } } 在实际GUI中 pu

所以我知道JavaFx在使用线程时更新GUI的方法称为Task,但是代码是否以类似的方式工作,或者是否存在任何差异。让我给你举个挥杆的例子:

GUI之外作为线程运行的另一个类

public void run(){
    while (socket.isConnected()) {
        String x = input.next();
        System.out.println(x);
        mg.updateChat(x)
    }
}
在实际GUI中

public void updateChat(final String input){
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            txtChat.setText(input); 
        }
    }); 
}

任务的工作方式完全相同吗?或者是否存在差异?如果存在差异,您将如何修改此代码以在JavaFx项目中工作?

您正在寻找JavaFx中对应的SwingUtil.invokeLater。如果是,则为:

Platform.runLater(java.lang.Runnable runnable)

据我所知,是的。我在多线程环境中使用它来更新javafx ui控件,就像我在Swing控件中使用SwingUtilities.invokeLater一样。如果运气不好,我的ui在运行runLater时会冻结。请确保长时间运行的任务在任务中运行,并且无论何时需要更新ui,都可以调用Platform.runLater。不要在runLater中运行长时间运行的任务,因为您的UI将冻结。lambda版本是nice Platform.runLater(()->txtch.setText(输入))