2013-07-26 2 views
6

В JavaFX, у меня есть класс контроллера, который вытягивает компоненты управления из файла FXML и имеет методы, которые действуют на компонентах, показанный с ярлыком здесь:JavaFX: Обновление пользовательского интерфейса элементов в классе контроллера из нити

public class ViewController { 
    @FXML private Label labelStatus; 

    public void updateStatusLabel(String label) { 
     labelStatus.setText("Status: " + label); 
    }  
} 

у меня также есть Java тему с помощью метода Run(), например:

public class Server extends Thread { 

    public void run() { 
     super.run();  
    } 
} 

Этот поток сервер обрабатывает несколько сокетов соединений, которые мне нужны для моего конкретного приложения. После установления соединения (в методе run() - не показан) мне нужно обновить Label в контроллере FXML. Как мне это сделать?

Примечание: Я намеренно сделал мой код и вопрос вообще, чтобы он мог помочь другим с той же проблемой.

ответ

4

Вы вызываете Platform.runLater(runnable) из потока пользовательского интерфейса JavaFX для выполнения runnable, который обновляет элементы активного графика сцены JavaFX в потоке пользовательского интерфейса JavaFX.

Также просмотрите Concurrency in JavaFX с классами Task и Service и посмотрите, не является ли это более подходящим решением для вашей конкретной задачи.

Для получения дополнительной информации см:

Смежные вопросы