Ответ JavaFx на SwingUtilities.invokeLater

Итак, я знаю, что метод обновления графического интерфейса JavaFx при использовании потока называется Task, но код работает аналогичным образом или есть какие-либо различия. позвольте мне привести вам пример свинга:

Другой класс вне графического интерфейса, работающий как поток

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

В самом графическом интерфейсе

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

Работает ли Task точно так же? Или есть различия, и если есть, как бы вы изменили этот код для работы в проекте JavaFx?


person Marc Rasmussen    schedule 20.10.2012    source источник


Ответы (1)


Вы ищете аналоги SwingUtil.invokeLater в JavaFX. Если да, то это:

Platform.runLater(java.lang.Runnable runnable)
person amru    schedule 20.10.2012
comment
Насколько я понимаю [API]( docs.oracle .com/javafx/2/api/javafx/application/Platform.html), да. Я использую его для обновления элементов управления пользовательского интерфейса javafx в многопоточной среде так же, как я использую SwingUtilities.invokeLater для элементов управления Swing. - person amru; 20.10.2012
comment
Здесь не повезло, мой пользовательский интерфейс зависает, когда я выполняю runLater. - person Ali; 03.02.2013
comment
Убедитесь, что ваша длительная задача выполняется внутри задачи и что всякий раз, когда вам нужно обновить пользовательский интерфейс, вы вызываете Platform.runLater. Не запускайте длительные задачи внутри runLater, потому что тогда ваш пользовательский интерфейс зависнет. - person mario; 27.05.2017
comment
Лямбда-версия хороша Platform.runLater(() -> txtChat.setText(input)) - person Wolfgang Fahl; 26.06.2017