Arreglar la excepción de JavaFx en el método de inicio de la aplicación

Rashmi Patidar 12 octubre 2023
Arreglar la excepción de JavaFx en el método de inicio de la aplicación

JavaFX es una biblioteca altamente enriquecida cuyo código se escribe en código Java nativo. La biblioteca se acostumbra a crear aplicaciones de Internet enriquecidas, a menudo conocidas como RIA.

La biblioteca es un conjunto de interfaces y clases que son fácilmente comprensibles y son una alternativa amigable a Java Virtual Machine o JVM. El código escrito con la biblioteca puede ejecutarse en múltiples plataformas sin fallas, como computadoras de escritorio, móviles, televisores, etc.

Hace mucho tiempo, la interfaz gráfica de usuario se crea utilizando plantillas de Swing, pero después de la llegada de JavaFX, uno puede confiar fácilmente en el lenguaje para trabajar sobre el mismo. Las aplicaciones creadas con JavaFx tienen una tasa de penetración del 76 por ciento.

La Exception in Application start method es el error de tiempo de ejecución que ocurre cuando la aplicación se está ejecutando y cuando se completa la compilación. El estado se produce cuando la aplicación es ineficiente para cargar archivos o variables de tiempo de ejecución. Puede lanzar NullPointerException, tipo de excepción FileNotFound cuando no se maneja correctamente.

Además, los complementos como SonarLint, el detector de errores de programación (PMD), la búsqueda de errores pueden ayudar a identificar los problemas de tiempo de ejecución de antemano sin ejecuciones reales del programa.

A continuación se muestra un ejemplo para mostrar el error Exception in Application start method en JavaFx.

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class ApplicationStart extends Application {
  public static void main(String[] args) {
    launch(args);
  }

  @Override
  public void start(Stage stage) throws Exception {
    Parent parent = FXMLLoader.load(getClass().getResource("AnyXML.fxml"));
    Scene scene = new Scene(parent);
    stage.setScene(scene);
    stage.setTitle("First Swing Sample");
    stage.show();
  }
}

El código fuente anterior que parece estar en JavaFx tiene un método main en la clase ApplicationStart. La clase dada extiende una clase abstracta de Aplicación y está específicamente disponible en la Biblioteca JavaFX.

Tiene un tema predeterminado llamado Caspein que se inicia una vez que inicias la aplicación. El launch es un método estático presente en la clase Application y se llama desde la función main. Toma argumentos variables o varargs como sus parámetros. Lanza IllegalStateException si el método de inicio se llama más de una vez.

La clase Application tiene un método abstracto cuya implementación debe estar presente en la clase ApplicationStart. La anotación override muestra que el código debajo de la anotación pertenece a la clase principal Application. La implementación del método que sigue la anulación de la anotación está presente debajo de la anotación.

El método start es la entrada principal para las aplicaciones JavaFX, ya que main es la ubicación de entrada para las aplicaciones Java. El método main se llama por primera vez cuando se inicializa la Application o hilo principal.

La función toma Stage como parámetro. Las Etapas denotan el paso o vista principal y se cargan cuando la aplicación se inicia en el visor de subprogramas. También arroja una excepción que se define junto con el método.

La primera declaración dentro del método es cargar el archivo XML. La clase FXMLLoader carga una jerarquía de objetos del modelo de objetos XML. Se utiliza para llevar la jerarquía de objetos de un documento FXML a una instancia Parent. Toma el parámetro como la URL a la ubicación donde está presente la jerarquía del documento XML.

El resultado se almacena en una instancia de clase Parent que contiene los subtipos en formato gráfico. La clase Scene presente en la biblioteca JavaFX es la unidad contenedora que almacena todos los datos en una vista de gráfico. El fondo de la escena se rellena con la propiedad especificada. La instancia de la clase Stage se crea y se puede usar con otras propiedades.

A continuación se mencionan las propiedades utilizadas para mostrar la escena en el navegador.

  • El método setScene hace su uso para especificar la escena y se usa junto con la variable de instancia del escenario.
  • La función setTitle se utiliza para establecer el título de la escena presente en el navegador. La función show se utiliza para poblar la escena sobre el escenario.

A continuación se muestra el resultado del bloque de código anterior.

Exception in Application start method java.lang.reflect.InvocationTargetException at sun.reflect
    .NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl
    .invoke(NativeMethodAccessorImpl.java : 62) at sun.reflect.DelegatingMethodAccessorImpl
    .invoke(DelegatingMethodAccessorImpl.java : 43) at java.lang.reflect.Method
    .invoke(Method.java : 498) at com.sun.javafx.application.LauncherImpl
    .launchApplicationWithArgs(LauncherImpl.java : 389) at com.sun.javafx.application.LauncherImpl
    .launchApplication(LauncherImpl.java : 328) at sun.reflect.NativeMethodAccessorImpl
    .invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl
    .invoke(NativeMethodAccessorImpl.java : 62) at sun.reflect.DelegatingMethodAccessorImpl
    .invoke(DelegatingMethodAccessorImpl.java : 43) at java.lang.reflect.Method
    .invoke(Method.java : 498) at sun.launcher.LauncherHelper$FXHelper
    .main(LauncherHelper.java : 873) Caused by
    : java.lang.RuntimeException
    : Exception in Application start method at com.sun.javafx.application.LauncherImpl
    .launchApplication1(LauncherImpl.java : 917) at com.sun.javafx.application.LauncherImpl
    .lambda$launchApplication$1(
        LauncherImpl.java : 182) at java.lang.Thread.run(Thread.java : 748) Caused by
    : java.lang.NullPointerException
    : Location is required.at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java : 3207) at javafx.fxml
    .FXMLLoader.loadImpl(FXMLLoader.java : 3175) at javafx.fxml.FXMLLoader
    .loadImpl(
        FXMLLoader.java : 3148) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java : 3124) at javafx
    .fxml.FXMLLoader.loadImpl(FXMLLoader.java : 3104) at javafx.fxml.FXMLLoader
    .load(FXMLLoader.java : 3097) at ApplicationStart.start(ApplicationStart.java : 15) at com.sun
    .javafx.application.LauncherImpl.lambda$launchApplication1$8(LauncherImpl.java : 863) at com.sun
    .javafx.application.PlatformImpl.lambda$runAndWait$7(PlatformImpl.java : 326) at com.sun.javafx
    .application.PlatformImpl.lambda$null$5(PlatformImpl.java : 295) at java.security
    .AccessController.doPrivileged(Native Method) at com.sun.javafx.application.PlatformImpl
    .lambda$runLater$6(PlatformImpl.java : 294) at com.sun.glass.ui.InvokeLaterDispatcher$Future
    .run(InvokeLaterDispatcher.java : 95) at com.sun.glass.ui.win.WinApplication
    ._runLoop(Native Method) at com.sun.glass.ui.win.WinApplication.lambda$null$3(
        WinApplication.java : 177)... 1 more Exception running application ApplicationStart

En el resultado que se muestra arriba, el problema surge en la posición del parámetro que usa la clase FXMLLoader para cargar el objeto XML, pero devuelve un valor nulo. En palabras simples, el método getResource() no localiza la ruta provista en el parámetro de la función.

Por lo tanto, el valor nulo completa NullPointerException, que es un tipo de excepción de tiempo de ejecución. Y se manejan dando una ruta absoluta donde se puede ubicar el archivo. El seguimiento de la pila a menudo muestra el número de línea donde el problema comienza a llenarse. El objetivo debe ser correcto cuando se proporciona en el parámetro de carga.

Por lo tanto, la solución dada al problema se encuentra a continuación.

  1. Proporcione la ruta absoluta a la ubicación donde se presenta el archivo.
  2. Agregue un complemento de SonarLint al entorno de desarrollo integrado que ayude a evaluar o manejar las excepciones en el momento de la escritura.
Rashmi Patidar avatar Rashmi Patidar avatar

Rashmi is a professional Software Developer with hands on over varied tech stack. She has been working on Java, Springboot, Microservices, Typescript, MySQL, Graphql and more. She loves to spread knowledge via her writings. She is keen taking up new things and adopt in her career.

LinkedIn

Artículo relacionado - Java Error