No en el hilo de la aplicación FX en Java

Sheeraz Gul 12 octubre 2023
No en el hilo de la aplicación FX en Java

Este tutorial demuestra el error Not on FX application thread en Java.

el hilo Not on FX application en Java

El error Not on FX application thread ocurre cuando intentamos llamar a un método desde un hilo que no es un hilo FX y debe llamarse desde el hilo FX. Esto no fue un problema con las versiones anteriores de JavaFX.

Ocurre con la nueva implementación de JavaFX 8. Este error ocurre al cambiar la interfaz de usuario en diferentes hilos de la aplicación JavaFX.

Aquí hay un ejemplo que arrojará el error No en el hilo de la aplicación FX.

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();

El código anterior crea un hilo y aplica algunos métodos a ese hilo. Estos métodos son de la aplicación JavaFX.

Al aplicar el método setText, arrojará el error Exception in thread "Thread-5" java.lang.IllegalStateException: Not on FX application thread; subproceso actual = subproceso-5.

Se pueden realizar los siguientes cambios en el código para resolver este problema.

  1. Para realizar cambios en la interfaz de usuario mientras trabaja en aplicaciones y subprocesos FX, use el siguiente método.

    Platform.runLater(()
                          -> {
                              // GUI STUFF
                          });
    
    or :
    
        Platform.runLater(new Runnable() {
          @Override
          public void run() {
            // GUI STUFF
          }
        });
    
  1. También podemos usar el Servicio y la Tarea en lugar del Hilo. Servicio tiene muchas más funciones que Hilo.

    Cambiar la interfaz de usuario dentro de la tarea nunca generará el error No en el hilo de la aplicación FX. Aquí hay un ejemplo de código del uso de Servicio y Tarea para este propósito.

    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();
    

    El código anterior es una forma más conveniente que los hilos.

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

Artículo relacionado - Java Thread

Artículo relacionado - Java Error