2013-07-26 8 views
6

In JavaFX, ich habe eine Controller-Klasse, die Steuerungskomponenten aus einer FXML Datei zieht und hat Methoden, die auf dem Bauteil wirken, mit einem Kennzeichnungsschild hier:JavaFX: Aktualisieren von UI-Elementen in einer Controller-Klasse von einem Thread

public class ViewController { 
    @FXML private Label labelStatus; 

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

ich habe auch eine Java-Thread mit einem Lauf() -Methode wie folgt aus:

public class Server extends Thread { 

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

Dieser Server-Thread behandelt einige Socket-Verbindungen, die ich für meine spezielle Anwendung benötigen. Nachdem eine Verbindung hergestellt wurde (in der run() -Methode - nicht gezeigt), muss ich das Label im FXML-Controller aktualisieren. Wie würde ich das tun?

Hinweis: Ich habe absichtlich meinen Code und Frage allgemein gemacht, damit es anderen mit dem gleichen Problem helfen kann.

Antwort

4

Sie rufen Platform.runLater(runnable) vom JavaFX-UI-Thread ab, um ein Runnable auszuführen, das Elemente des aktiven JavaFX-Szenengraphen auf dem JavaFX-UI-Thread aktualisiert.

Überprüfen Sie auch Concurrency in JavaFX, mit den Task und Service Klassen und sehen, ob das nicht eine bessere Lösung für Ihre spezielle Aufgabe ist.

Weitere Informationen finden Sie unter:

Verwandte Themen