Inhalte mit Threads ändern -> java.lang.IllegalStateException

Sugan

Mitglied
Hallo zusammen,

ich habe ein Programm geschrieben, bei dem durch ein Listener (hier ein MouseReleased Listener) ein neuer Thread gestartet wird. Wenn in diesem Thread z.B. der Inhalt meiner HBox geändert werden soll, bekomme ich immer Folgende Fehlermeldung:

Exception in thread "Thread-5" java.lang.IllegalStateException: Not on FX application thread; currentThread = Thread-5
at com.sun.javafx.tk.Toolkit.checkFxUserThread(Unknown Source)
at com.sun.javafx.tk.quantum.QuantumToolkit.checkFxUserThread(Unknown Source)
at javafx.scene.Parent$2.onProposedChange(Unknown Source)
at com.sun.javafx.collections.VetoableListDecorator.clear(Unknown Source)
at Test$TestThread.run(Test.java:48)
at java.lang.Thread.run(Unknown Source)

Ich hab das Programm für euch stark vereinfacht und alles andere weggelassen, darum wundert euch nicht. Es werden jetzt nur ein blaues und ein grünes Rechteck erzeugt, aber nur das blaue ist Inhalt der angezeigten HBox. Beim Pressen der Maustaste wird der Inhalt der HBox gelöscht und stattdessen das grüne Rechteck übergeben. Soweit funkioniert es auch.
Beim Loslassen soll wieder das blaue Rechteck angezeigt werden (statt dem grünen), aber diesmal soll dieser Vorgang über einen neuen Thread ausgelöst werden. (Im echten Programm ist dies eine längere Animation, die aber nicht die Listener blockieren soll, daher der extra-Thread).

Hier das Programm:

Java:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;

public class Test extends Application{
  
    HBox hbox = new HBox();
    Rectangle rect = new Rectangle(100, 100, 100, 100);      
    Rectangle rect2 = new Rectangle(100, 100, 100, 100);
    TestThread newThread = new TestThread();

    public static void main(String[] args) {
          launch(args);
      }
    
    public void start(Stage stage) {   

       rect.setFill(Color.BLUE);
       rect2.setFill(Color.GREEN);
      
       hbox.getChildren().add(rect);
      
       Scene scene = new Scene(hbox);
       stage.setScene(scene);
       stage.setTitle("Test");

        hbox.setOnMousePressed(event -> {
            hbox.getChildren().clear();
            hbox.getChildren().add(rect2);
        });
        
        hbox.setOnMouseReleased(event -> {  
            Thread testThread = new Thread(newThread);
            testThread.start();
        });
        
       stage.show();
    }
    
    private class TestThread implements Runnable{
        @Override
        public void run() {
            hbox.getChildren().clear();
            hbox.getChildren().add(rect);
        }
    }    
}


Was genau bedeutet der Fehler und wie vermeide ich ihn?
Und nebenbei bemerkt, bei meinem vereinfachten Testprogramm greift der Released Listener bei mir auf einmal erst beim zweiten mal klicken... Ihr wisst nicht zufällig auch, woran das liegt?

Schonmal vielen Dank im Vorraus

Sugan
 

mrBrown

Super-Moderator
Mitarbeiter
Man darf mit JavaFX keine GUI-Komponenten aus einem nicht-FX-Thread bearbeiten.
Anstatt selber einen Thread zu starten, kannst du den mit Platform.runLater starten, dann läuft der innerhalb des FX-Threads.
 

Sugan

Mitglied
Oh ok, hatte neu mit FX angefangen... danke für die Info.
Hast du dazu genauer Infos oder n Link?

Danke auf jeden Fall!
 

dayaftereh

Top Contributor
Hey, das Problem bzw der Point ist das FX seinen eigenen Thread hat um seine Componenten, sich selbst aktuell zu halten und auf Events zu reagieren.

Du musst aus ThreadSafety dein aufruf aus deinem Thread über Platform#runLate(...) Ausführen.

PS: zu spät :(
 

Flown

Administrator
Mitarbeiter
Am besten verwende keinen eigenen Thread sondern verwende doch Tasks: HIER gibts die offizielle JavaFX Tutorial Seite für Concurrency and Threading in JavaFX
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B JPanel-Inhalte inkl. JTextarea zoomen? AWT, Swing, JavaFX & SWT 3
S JavaFX ListView Inhalte während Laufzeit ändern AWT, Swing, JavaFX & SWT 23
M Inhalte einer FlowPane AWT, Swing, JavaFX & SWT 4
I JAVAFX - Übergabe der Inhalte an eine Scene - Wo ist der Vorteil gegenüber Swing? AWT, Swing, JavaFX & SWT 2
G Swing Wenn ich mein JFrame Fenster vergrößere die Inhalte anpassen AWT, Swing, JavaFX & SWT 1
J Swing Probleme mit ListSelectionListener(), Inhalte der JList werden gelöscht? AWT, Swing, JavaFX & SWT 6
LexeB4F JTable mehrere Zelle selektieren und inhalte Löschen.. Ideen gesucht AWT, Swing, JavaFX & SWT 1
thobren JavaFX Inhalte aus dynamischen vbox mit TextArea auslesen AWT, Swing, JavaFX & SWT 9
J Swing unterschiedliche Inhalte in einem JFrame AWT, Swing, JavaFX & SWT 3
V kann ich in einer Klasse stage und scene deklarieren, aber in anderen Klassen Inhalte hinzufügen ? AWT, Swing, JavaFX & SWT 5
OnDemand Box Inhalte rechsbündig AWT, Swing, JavaFX & SWT 6
I JTable Inhalte löschen ohne den JTable zu verändern! AWT, Swing, JavaFX & SWT 5
S Swing Inhalte von Scroll-Panes werden nicht gezeichnet AWT, Swing, JavaFX & SWT 9
E Swing JTable Inhalte löschen..Was ist Sinnvoll? AWT, Swing, JavaFX & SWT 5
R Tab-Inhalte aktualisieren AWT, Swing, JavaFX & SWT 4
F Swing jScrollPane Inhalte AWT, Swing, JavaFX & SWT 2
M Datenbanktabellen Inhalte in JLabel anzeigen AWT, Swing, JavaFX & SWT 2
T Problem mit der Programmierung von Fenster und deren Inhalte AWT, Swing, JavaFX & SWT 4
M Platzhalter: Inhalte nicht vergrößern AWT, Swing, JavaFX & SWT 2
L Alle Inhalte in BorderLayout.CENTER löschen? AWT, Swing, JavaFX & SWT 2
R Manchmal werden die Inhalte des JFrames nicht angezeigt AWT, Swing, JavaFX & SWT 3
S JDialog und 'Inhalte' schliessen bzw. leeren AWT, Swing, JavaFX & SWT 9
O Inhalte in JTable löschen AWT, Swing, JavaFX & SWT 3
C JList Inhalte abfragen AWT, Swing, JavaFX & SWT 2
G GUI - Inhalte wechseln (Eingabe-Assistenten programmieren) AWT, Swing, JavaFX & SWT 2
C Inhalte in immer das gleiche Fenster ausgeben? AWT, Swing, JavaFX & SWT 3
D Alle Inhalte einer JTextArea in einem JScrollPane löschen AWT, Swing, JavaFX & SWT 2
frager2345 Threads -> Ereignisbehandlung AWT, Swing, JavaFX & SWT 2
N jFrame löscht am Ende des Threads alles AWT, Swing, JavaFX & SWT 2
J GUI Ausgaben aus Threads AWT, Swing, JavaFX & SWT 13
A Swing ProgressBar über 2 parallel laufende Threads AWT, Swing, JavaFX & SWT 2
N JavaFX Logging des JavaFX Application Threads mit Log4J AWT, Swing, JavaFX & SWT 3
U JAVAFX observer und threads AWT, Swing, JavaFX & SWT 1
J Textlabel verändern mit parallelen Threads AWT, Swing, JavaFX & SWT 7
R Straßenkreuzung - Ampeln mit Threads koordinieren AWT, Swing, JavaFX & SWT 5
C Threads Swing AWT, Swing, JavaFX & SWT 11
Z JavaFX Threads AWT, Swing, JavaFX & SWT 4
T hallo, habe ein Problem mit dem pro. eines Threads AWT, Swing, JavaFX & SWT 4
M Threads - nicht erklärbare Exception AWT, Swing, JavaFX & SWT 6
R Repaint() in Schleifen, Threads AWT, Swing, JavaFX & SWT 13
S Java Swing GUI mit MVC und Threads AWT, Swing, JavaFX & SWT 6
M Frage zu Threads AWT, Swing, JavaFX & SWT 3
C JTextArea scrollt bei append(String) aus Threads nicht ans Ende AWT, Swing, JavaFX & SWT 7
K Threads - Timer - run() mehrfach parallel? AWT, Swing, JavaFX & SWT 2
B GUI mit Threads aufbauen AWT, Swing, JavaFX & SWT 5
E Threads Ausgaben in GUI anzeigen lassen AWT, Swing, JavaFX & SWT 14
P JavaFX 2 (2.1 Beta) Threads AWT, Swing, JavaFX & SWT 7
B Threads in Swing AWT, Swing, JavaFX & SWT 4
M Problem mit Threads AWT, Swing, JavaFX & SWT 64
R Swing Java Swing Gui und nebenläufige Threads AWT, Swing, JavaFX & SWT 4
S Swing Threads Windows 7 64 bit AWT, Swing, JavaFX & SWT 12
J Threads + JFrame AWT, Swing, JavaFX & SWT 4
R Java threads und synchronized AWT, Swing, JavaFX & SWT 15
R Swing Swing und die Threads AWT, Swing, JavaFX & SWT 9
N Swing Threads sollen Tabtitel zur Laufzeit ändern AWT, Swing, JavaFX & SWT 4
S Gui und Aufgaben Threads AWT, Swing, JavaFX & SWT 12
M Zugriff paralleler Threads auf selbes JTextPane AWT, Swing, JavaFX & SWT 6
B Frage zu Swing,Threads, SwingWorker und Socket Communikation AWT, Swing, JavaFX & SWT 4
M Prioritäten bei SwingWorker / Threads AWT, Swing, JavaFX & SWT 9
B Swing GUI und Threads AWT, Swing, JavaFX & SWT 4
R Korrektes manipulieren der GUI aus anderen Threads heraus AWT, Swing, JavaFX & SWT 19
S Threads und Layout AWT, Swing, JavaFX & SWT 9
S Threads in einen Frame zeichnen lassen (Paint()?!) AWT, Swing, JavaFX & SWT 5
W GUI in mehreren Threads AWT, Swing, JavaFX & SWT 5
F Swing Anfängerproblem Threads AWT, Swing, JavaFX & SWT 6
S Swing Threads und das Ändern des Hintergrundes ... AWT, Swing, JavaFX & SWT 2
S Zeichnen in Threads AWT, Swing, JavaFX & SWT 4
T Auf Ende von mehreren Threads warten, ohne den EDT zu blockieren AWT, Swing, JavaFX & SWT 1
J SWT SWT und Threads AWT, Swing, JavaFX & SWT 5
borobudur SWT SWT-Framework und Threads AWT, Swing, JavaFX & SWT 12
W Threads nacheinander aufführen AWT, Swing, JavaFX & SWT 5
A Swing und Threads AWT, Swing, JavaFX & SWT 8
B JProgressbar wird nicht aktualisert, trotz Threads AWT, Swing, JavaFX & SWT 6
K Timer und Threads ruckeln für Fotoschwenk AWT, Swing, JavaFX & SWT 3
S JProgressBar und Threads AWT, Swing, JavaFX & SWT 11
G Probleme mit jList und Threads. AWT, Swing, JavaFX & SWT 3
R Swing & Threads AWT, Swing, JavaFX & SWT 4
R 2 Threads nacheinander. Einer terminiert, der andere nicht. AWT, Swing, JavaFX & SWT 9
J Unterschied zwischen SwingWorker und Threads AWT, Swing, JavaFX & SWT 4
P Threads und Swing bzw. AWT AWT, Swing, JavaFX & SWT 15
W Threads und trotzdem keine Nebenläufigkeit AWT, Swing, JavaFX & SWT 13
G Fenster erst nach Stoppen des Threads anzeigen AWT, Swing, JavaFX & SWT 3
N Threads kein neues Fenster erzeugen lassen AWT, Swing, JavaFX & SWT 4
G problem mit threads/repaint ! AWT, Swing, JavaFX & SWT 2
W Swing, 2 JProgressbars und threads geht das? AWT, Swing, JavaFX & SWT 2
A JTextArea und Threads AWT, Swing, JavaFX & SWT 9
B Probleme mit GUI und Threads AWT, Swing, JavaFX & SWT 17
E repaint(), EDT-Warteschlange und Threads AWT, Swing, JavaFX & SWT 26
S Threads in Java AWT, Swing, JavaFX & SWT 22
G AWT + Threads = nicht gut :P AWT, Swing, JavaFX & SWT 6
F Verständis Problem zu Threads AWT, Swing, JavaFX & SWT 2
M Swinganwendung Threads mit JProgressBar AWT, Swing, JavaFX & SWT 7
V Problem mit Aktualisieren von JList mit Threads AWT, Swing, JavaFX & SWT 3
U FileChooser Layout - Threads? AWT, Swing, JavaFX & SWT 17
R JProgressBar ohne Threads verwenden AWT, Swing, JavaFX & SWT 6
I JList, AbstractListModel und nebenläufige Threads AWT, Swing, JavaFX & SWT 2
S "Millionen" von Threads? Programm komplett beenden AWT, Swing, JavaFX & SWT 2
M Konsolenprg-Ausgabe in GUI geleitet - Brauche ich Threads? AWT, Swing, JavaFX & SWT 2
K Swing und Threads AWT, Swing, JavaFX & SWT 11
M Threads in Swing? AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben