2013-07-26 8 views
6

W JavaFX, mam klasy kontroler, który ciągnie elementy sterujące z pliku FXML i posiada metody, które działają na element, pokazany z etykietą tutaj:JavaFX: Aktualizacja elementów interfejsu w klasie kontrolera z wątku

public class ViewController { 
    @FXML private Label labelStatus; 

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

mam też wątek Java z metody run() w następujący sposób:

public class Server extends Thread { 

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

wątek Serwer obsługuje kilka połączeń gniazda, które jest potrzebne do mojego konkretnego zastosowania. Po nawiązaniu połączenia (w metodzie run() - nie pokazano), muszę zaktualizować etykietę w kontrolerze FXML. Jak to zrobić?

Uwaga: Celowo zrobiłem mój kod i pytanie ogólne, aby pomóc innym osobom z tym samym problemem.

Odpowiedz

4

Wywołujesz Platform.runLater(runnable) z wątku JavaFX UI, aby wykonać operację, która aktualizuje elementy aktywnego wykresu sceny JavaFX w wątku interfejsu JavaFX.

Zobacz również Concurrency in JavaFX, z klasami Task i Service i zobacz, czy nie jest to bardziej odpowiednie rozwiązanie dla danego zadania.

Aby uzyskać więcej informacji, patrz: