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 fonctionshow
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.
- Donnez le chemin absolu vers l’emplacement où le fichier est présent.
- 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 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