2016-07-13 13 views
2

Wird der im folgenden Dokument hinzugefügte Code geändert, wird der Listener immer im JavaFX-Anwendungsthread ausgeführt?Auf welchen Thread JavaFX Änderung Listener ausgeführt werden?

webEngineObject.documentProperty().addListener(new ChangeListener<Document>(){ 

        @Override 
        public void changed(
          ObservableValue<? extends Document> arg0, 
          Document arg1, Document arg2) {      
         //some code here 
        } 

     }); 

Oder muss ich Platform.runLater() hinzufügen müssen?

Als ich nach dem Treffen eines Haltepunktes den Thread-Stack betrachtete, sah es so aus, als würde Code in JavaFX Application Thread selbst ausgeführt, wollte aber bestätigen, da in der Dokumentation diesbezüglich kein Kommentar gefunden werden konnte. Jeder Link zu einer Dokumentation, die dies erwähnt, wäre wirklich hilfreich.

Antwort

4

Generell ändern Zuhörer laufen auf dem gleichen Thread wurde die Änderung vorgenommen wird. Natürlich könnte es Implementierungen von Property oder ObservableValue geben, die den Listener auf einem anderen Thread aufrufen, aber soweit ich weiß, gibt es keine Standardimplementierungen mit diesem Verhalten.

Also die einfache Antwort ist - der Change-Listener wird auf dem Thread laufen, der die ursprüngliche Änderung durchgeführt wurde.
Wenn die Eigenschaft mit einem JavaFX-Knoten verknüpft ist, sollte die ursprüngliche Änderung im JavaFX-Thread aufgerufen worden sein, um die Ausnahme "Nicht im FX-Anwendungsthread" zu verhindern.

Verwandte Themen