FX-Control aus Thread ansprechen

JavaFX und die Programmierung

Moderator: wegus

Antworten
znieh99
Beiträge: 45
Registriert: 28.03.2014, 17:12

FX-Control aus Thread ansprechen

Beitrag von znieh99 » 03.10.2020, 10:12

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

Benutzeravatar
nigjo
Beiträge: 652
Registriert: 08.09.2009, 09:43
Wohnort: Aachen
Kontaktdaten:

Re: FX-Control aus Thread ansprechen

Beitrag von nigjo » 05.10.2020, 07:35

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
Man sollte seine Werkzeuge kennen. Ansonsten haut man sich mit dem Hammer nur auf die Finger.

--
NetBeans Certified Engineer - Java Getriebe

Antworten