HOWTO · Java
No en el hilo de la aplicación FX en Java
Este tutorial demuestra el error de subproceso de la aplicación Not on FX en Java.
En esta página
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.
-
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 } }); -
También podemos usar el
Servicioy laTareaen lugar delHilo.Serviciotiene muchas más funciones queHilo.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 deServicioyTareapara 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.