Seite 1 von 1

FX-Control aus Thread ansprechen

Verfasst: 03.10.2020, 10:12
von znieh99
Hallo Forum,
ich möchte in einem eigenen Thread den Text eines FX-Label-Control ändern. Die Änderung wird durchgeführt aber es kommt zu folgender Ausnahme:

"Exception in thread "Thread-4" java.lang.IllegalStateException: Not on FX application thread; currentThread = Thread-4"

Kann mir da wer helfen?
lg heinz

Re: FX-Control aus Thread ansprechen

Verfasst: 05.10.2020, 07:35
von nigjo
Hi

genau wie Swing ist JavaFx quasi "Single-Threaded". Das heißt, dass du außerhalb des JavaFx-Event-Threads nichts an den Elementen ändern solltest. Hier wird es wohl auch aktiv unterbunden (in Swing in der Regel nicht, sollte man aber trotzdem nicht machen).

Ein kurze Suche mit "Javafx event thread" sagt mit, dass ein Aufruf von "Platform.runLater()" dein Problem lösen sollte (In Swing heßt das SwingUtilities.invokeLater()"). Damit kannst du die UI-Änderungen in den Event-Thread verlegen. Du solltest nur beachten, dass diese Änderungen nicht mehr in deinem Thread laufen und du somit keine direkte "Abfragen" zum Zustand der UI-Elemente mehr machen kannst.

richtig kompliziert wird es, wenn innerhalb einer Anwendung JavaFx und Swing zusammen genutzt werden. Die haben nämlich jeweils ihren eigenen Event Thread, den man nicht (ver)mischen sollte.

Gruß
Jens