Correction de l'exception JavaFx dans la méthode de démarrage de l'application

Rashmi Patidar 12 octobre 2023
Correction de l'exception JavaFx dans la méthode de démarrage de l'application

JavaFX est une bibliothèque hautement enrichie dont le code est écrit en code Java natif. La bibliothèque s’habitue à créer des applications Internet riches, souvent appelées RIA.

La bibliothèque est un ensemble d’interfaces et de classes facilement compréhensibles et constitue une alternative conviviale à Java Virtual Machine ou JVM. Le code écrit à l’aide de la bibliothèque peut s’exécuter sans faute sur plusieurs plates-formes, telles que les ordinateurs de bureau, les mobiles, les téléviseurs, etc.

Il y a longtemps, l’interface utilisateur graphique est construite à l’aide de modèles Swing, mais après l’avènement de JavaFX, on peut facilement compter sur le langage pour travailler dessus. Les applications construites à l’aide de JavaFx ont un taux de pénétration de 76 %.

Exception in Application start method est l’erreur d’exécution qui se produit lorsque l’application est en cours d’exécution et lorsque la compilation est terminée. L’état se produit lorsque l’application est inefficace pour charger des variables ou des fichiers d’exécution. Il peut lancer des exceptions de type NullPointerException, FileNotFound lorsqu’il n’est pas géré correctement.

De plus, des plugins comme SonarLint, détecteur d’erreur de programmation (PMD), trouver des bogues peuvent aider à identifier les problèmes d’exécution à l’avance sans exécution réelle du programme.

Vous trouverez ci-dessous un exemple montrant l’erreur Exception in Application start method dans 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();
  }
}

Le code source ci-dessus qui semble être en JavaFx a une méthode main dans la classe ApplicationStart. La classe donnée étend une classe abstraite Application et est spécifiquement disponible dans la bibliothèque JavaFX.

Il a un thème par défaut appelé Caspein qui se lance une fois que vous démarrez l’application. Le launch est une méthode statique présente dans la classe Application et est appelée depuis la fonction main. Il prend des arguments variables ou varargs comme paramètres. Il lève IllegalStateException si la méthode de lancement est appelée plus d’une fois.

La classe Application possède une méthode abstraite dont l’implémentation doit être présente dans la classe ApplicationStart. L’annotation override indique que le code situé sous l’annotation appartient à la classe parente Application. L’implémentation de la méthode qui est précédée par le remplacement d’annotation est présente sous l’annotation.

La méthode start est l’entrée principale pour les applications JavaFX, comme main est l’emplacement d’entrée pour les applications Java. La méthode main est appelée en premier lorsque l’application Application ou le thread principal est initialisé.

La fonction prend Stage comme paramètre. Les étapes indiquent l’étape ou la vue principale et sont chargées lorsque l’application se lance dans la visionneuse d’applet. Il lance également une exception qui est définie avec la méthode.

La première instruction à l’intérieur de la méthode consiste à charger le fichier XML. La classe FXMLLoader charge une hiérarchie d’objets à partir du modèle d’objet XML. Il est utilisé pour amener la hiérarchie d’objets d’un document FXML dans une instance Parent. Il prend le paramètre comme URL vers l’emplacement où la hiérarchie de documents XML est présente.

Le résultat est stocké dans une instance de classe Parent qui contient les sous-types au format graphique. La classe Scene présente dans la bibliothèque JavaFX est l’unité de conteneur qui stocke toutes les données dans une vue graphique. L’arrière-plan de la scène est rempli par la propriété spécifiée. L’instance de la classe Stage est créée et peut être utilisée avec d’autres propriétés.

Ci-dessous sont mentionnées les propriétés utilisées pour afficher la scène sur le navigateur.

  • La méthode setScene sert à spécifier la scène et s’utilise avec la variable d’instance stage.
  • La fonction setTitle sert à définir le titre de la scène présente sur le navigateur. La fonction show sert à peupler la scène sur la scène.

Vous trouverez ci-dessous la sortie du bloc de code ci-dessus.

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

Dans la sortie ci-dessus, le problème est soulevé à la position du paramètre qui utilise la classe FXMLLoader pour charger l’objet XML, mais il renvoie une valeur nulle. En termes simples, la méthode getResource() ne localise pas le chemin fourni dans le paramètre de la fonction.

Par conséquent, la valeur null remplit NullPointerException, qui est un type d’exception d’exécution. Et sont gérés en donnant un chemin absolu où le fichier peut être localisé. La trace de la pile affiche souvent le numéro de ligne où le problème commence à se remplir. La cible doit être correcte lorsqu’elle est donnée dans le paramètre load.

Par conséquent, la solution donnée au problème est ci-dessous.

  1. Donnez le chemin absolu vers l’emplacement où le fichier est présent.
  2. Ajoutez un plug-in SonarLint à l’environnement de développement intégré qui aide à évaluer ou à gérer les exceptions au moment de l’écriture.
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

Article connexe - Java Error