Nicht im FX-Anwendungsthread in Java
Dieses Tutorial demonstriert den Fehler Not on FX application thread
in Java.
den Not on FX-Anwendungsthread
in Java
Der Fehler Nicht im FX-Anwendungsthread
tritt auf, wenn wir versuchen, eine Methode von einem Thread aufzurufen, der kein FX-Thread ist und vom FX-Thread aufgerufen werden sollte. Dies war kein Problem mit früheren Versionen von JavaFX.
Er tritt bei der neuen Implementierung von JavaFX 8 auf. Dieser Fehler tritt auf, wenn die Benutzeroberfläche in verschiedenen Threads in der JavaFX-Anwendung geändert wird.
Hier ist ein Beispiel, das den Fehler Not on FX application thread
auslöst.
Thread DemoThreadShow = new Thread(new Runnable() {
@Override
public void run() {
try {
newthread.setStyle("visibility: true");
Thread.sleep(10000);
Thread.interrupted();
} catch (Exception e) {
thread.setText("" + Integer.valueOf(thread.getText()) + 5);
newthread.setStyle("visibility: false");
}
}
});
DemoThreadShow.start();
Der obige Code erstellt einen Thread und wendet einige Methoden auf diesen Thread an. Diese Methoden stammen aus der JavaFX-Anwendung.
Beim Anwenden der Methode setText
wird der Fehler Exception in Thread
Thread-5 java.lang.IllegalStateException: Not on FX application thread; aktueller Thread = Thread-5
.
Die folgenden Änderungen können am Code vorgenommen werden, um dieses Problem zu lösen.
-
Um während der Arbeit an FX-Anwendungen und -Threads Änderungen an der Benutzeroberfläche vorzunehmen, verwenden Sie die folgende Methode.
Platform.runLater(() -> { // GUI STUFF }); or : Platform.runLater(new Runnable() { @Override public void run() { // GUI STUFF } });
-
Anstelle des
Threads
können wir auchService
undTask
verwenden.Service
hat viel mehr Funktionen alsThread
.Das Ändern der Benutzeroberfläche innerhalb der Aufgabe wird niemals den Fehler
Nicht im FX-Anwendungsthread
auslösen. Hier ist ein Codebeispiel für die Verwendung vonService
undTask
für diesen Zweck.Service New_Service = new Service() { @Override protected Task createTask() { return new Task() { @Override protected Object call() throws Exception { Platform.runLater(() -> { // GUI stuff here }); return null; } }; } }; New_Service.start();
Der obige Code ist ein bequemerer Weg als Threads.
Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.
LinkedIn FacebookVerwandter Artikel - Java Thread
- Überblick über ThreadLocal in Java
- Daemon-Thread in Java
- Thread in Java beenden
- Thread-ID in Java abrufen
Verwandter Artikel - Java Error
- Adresse wird bereits verwendet JVM_Bind-Fehler in Java
- Android Java.Lang.IllegalStateException behoben: Methode der Aktivität konnte nicht ausgeführt werden
- Ausnahme im Hauptthread Java.Lang.ClassNotFoundException in IntelliJ IDEA
- Ausnahme im Hauptthread Java.Lang.NoClassDefFoundError
- Beheben Sie das Problem, dass Java nicht installiert werden kann. Es gibt Fehler in den folgenden Schaltern
- Beheben Sie den Fehler `Es wurde keine Java Virtual Machine gefunden` in Eclipse