Nicht im FX-Anwendungsthread in Java

Sheeraz Gul 12 Oktober 2023
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.

  1. 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
          }
        });
    
  1. Anstelle des Threads können wir auch Service und Task verwenden. Service hat viel mehr Funktionen als Thread.

    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 von Service und Task 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 Gul avatar Sheeraz Gul avatar

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 Facebook

Verwandter Artikel - Java Thread

Verwandter Artikel - Java Error