2016-05-22 12 views
0

Ich habe ein Label in meiner fxml Datei:Wie fxml Label von einem Hintergrundarbeiter aktualisieren?

<Label fx:id="labelA"/> 

ich dies in der Steuerung während eines Hintergrundarbeiter ausgeführt aktualisieren möchten. Ich habe versucht, so etwas zu tun:

public class FXHelloCVController 
{ 
    @FXML 
    private Label labelA; 
    @FXML 
    protected void startMatching(ActionEvent event) 
    { 
     SwingWorker<Boolean, String> worker = new SwingWorker<Boolean, String>() 
     { 
      @Override 
      protected Boolean doInBackground() throws Exception 
      { 

       for(int y=0; y<*something*; y++){ 
        if(n.get(y)!=null){ 
         ... 
         publish(n.get(y).name); 
         ... 
        } 
       } 
       return true; 
      } 

      @Override 
      protected void process(List<String> chunks) { 
       String n = chunks.get(chunks.size()-1); 
       labelA.setText(n); 
      } 
     }; 
     worker.execute(); 
     return; 
    } 

Aber wenn die Funktion „labelA.setText (n)“ genannt wird, es erscheint die folgende Ausnahme:

Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: Not on FX application thread; currentThread = AWT-EventQueue-0 

Was ist falsch?

+0

Gianna nicht Swing mit JavaFX anstelle von diesem Java hat etwas sehr schönes, das ist Service und Arbeiter-Klassen finden Sie hier: http: //docs.oracle.com/javafx/2/threads/jfxpub-threads. htm (es ist nicht zu leicht, auf einmal zu lernen, aber sobald du es machst, ist es wirklich cool). – GOXR3PLUS

Antwort

2

Platform.runLater: Wenn Sie eine GUI-Komponente aus einem Nicht-GUI-Thread aktualisieren müssen, können Sie damit Ihr Update in eine Warteschlange stellen und es wird so schnell wie möglich vom GUI-Thread behandelt.

Platform.runLater(new Runnable() { 
     @Override public void run() { 
      // update an FXML node (e.g. label) 
     } 
    }); 

Quelle: Platform.runLater and Task in JavaFX

Aber Sie sind mit Swing und JavaFX, die nicht in der Regel ist.

+0

Perfekte Antwort danke! – Gianna

1

Ein SwingWorker ist für Swing und nicht für JavaFX. Sehen Sie sich die Dokumentation zu den entsprechenden JavaFX-Parallelitätsmechanismen an.

Verwandte Themen