JavaFx-Ausnahme in der Anwendungsstartmethode behoben

Rashmi Patidar 12 Oktober 2023
JavaFx-Ausnahme in der Anwendungsstartmethode behoben

JavaFX ist eine hochgradig angereicherte Bibliothek, deren Code in nativem Java-Code geschrieben wird. Die Bibliothek gewöhnt sich daran, Rich-Internet-Anwendungen zu erstellen, die oft als RIA bekannt sind.

Die Bibliothek besteht aus einer Reihe von Schnittstellen und Klassen, die leicht verständlich sind und eine benutzerfreundliche Alternative zu Java Virtual Machine oder JVM darstellen. Der mit der Bibliothek geschriebene Code kann ohne Fehler auf mehreren Plattformen wie Desktops, Mobiltelefonen, Fernsehern usw. ausgeführt werden.

Vor langer Zeit wurde die grafische Benutzeroberfläche mit Swing-Vorlagen erstellt, aber nach dem Aufkommen von JavaFX kann man sich leicht darauf verlassen, dass die Sprache darüber funktioniert. Die mit JavaFx erstellten Anwendungen haben eine Penetrationsrate von 76 Prozent.

Die Exception in Application start method ist der Laufzeitfehler, der auftritt, wenn die Anwendung ausgeführt wird und wenn die Kompilierung abgeschlossen ist. Der Zustand tritt auf, wenn die Anwendung beim Laden von Laufzeitvariablen oder Dateien ineffizient ist. Es kann Ausnahmen vom Typ NullPointerException, FileNotFound auslösen, wenn es nicht richtig behandelt wird.

Darüber hinaus können Plugins wie SonarLint, Programming Error Detector (PMD) zur Fehlersuche helfen, Laufzeitprobleme im Voraus zu identifizieren, ohne dass das Programm tatsächlich ausgeführt wird.

Unten ist ein Beispiel, um den Fehler Exception in Application start method in JavaFx zu zeigen.

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

Der obige Quellcode, der in JavaFx zu sein scheint, hat eine main-Methode in der ApplicationStart-Klasse. Die angegebene Klasse erweitert eine abstrakte Application-Klasse und ist speziell in der JavaFX-Bibliothek verfügbar.

Es hat ein Standardthema namens Caspein, das gestartet wird, sobald Sie die Anwendung starten. Der launch ist eine statische Methode, die in der Application-Klasse vorhanden ist und von der main-Funktion aufgerufen wird. Es nimmt variable Argumente oder varargs als seine Parameter. Es löst IllegalStateException aus, wenn die Startmethode mehr als einmal aufgerufen wird.

Die Klasse Application hat eine abstrakte Methode, deren Implementierung in der Klasse ApplicationStart vorhanden sein muss. Die Annotation override zeigt, dass der Code unter der Annotation zur übergeordneten Application-Klasse gehört. Die Implementierung der Methode, die durch die Annotationsüberschreibung fortgesetzt wird, ist unterhalb der Annotation vorhanden.

Die Methode start ist der Haupteintrag für die JavaFX-Anwendungen, da main der Einstiegsort für die Java-Anwendungen ist. Die Methode main wird zuerst aufgerufen, wenn die Application oder der Haupt-Thread initialisiert wird.

Die Funktion nimmt als Parameter Stage. Die Phasen bezeichnen den primären Schritt oder die primäre Ansicht und werden geladen, wenn die Anwendung im Applet-Viewer gestartet wird. Es löst auch eine Ausnahme aus, die zusammen mit der Methode definiert wird.

Die erste Anweisung innerhalb der Methode besteht darin, die XML-Datei zu laden. Die Klasse FXMLLoader lädt eine Objekthierarchie aus dem XML-Objektmodell. Es wird verwendet, um die Objekthierarchie aus einem FXML-Dokument in eine Parent-Instanz zu bringen. Es verwendet den Parameter als URL zu dem Ort, an dem die XML-Dokumenthierarchie vorhanden ist.

Das Ergebnis wird in einer Klasseninstanz Parent gespeichert, die die Untertypen im Diagrammformat enthält. Die in der JavaFX-Bibliothek vorhandene Klasse Scene ist die Containereinheit, die alle Daten in einer Diagrammansicht speichert. Der Hintergrund der Szene wird mit der angegebenen Eigenschaft gefüllt. Die Instanz der Stage-Klasse wird erstellt und kann mit anderen Eigenschaften verwendet werden.

Nachfolgend sind die Eigenschaften aufgeführt, die zum Anzeigen der Szene über den Browser verwendet werden.

  • Die Methode setScene wird verwendet, um die Szene zu spezifizieren, und wird zusammen mit der Bühneninstanzvariable verwendet.
  • Die Funktion setTitle wird verwendet, um den Szenentitel zu setzen, der über den Browser vorhanden ist. Die show-Funktion wird verwendet, um die Szene über die Bühne zu bevölkern.

Unten ist die Ausgabe für den obigen Codeblock.

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

In der oben gezeigten Ausgabe wird das Problem an der Parameterposition ausgelöst, die die Klasse FXMLLoader zum Laden des XML-Objekts verwendet, aber einen Nullwert zurückgibt. Mit einfachen Worten, die Methode getResource() findet den im Funktionsparameter angegebenen Pfad nicht.

Daher füllt der Nullwert NullPointerException, was eine Art Laufzeitausnahme ist. Und werden behandelt, indem ein absoluter Pfad angegeben wird, in dem die Datei gefunden werden kann. Der Stack-Trace zeigt oft die Zeilennummer, ab der das Problem auftaucht. Das Ziel muss korrekt sein, wenn es im Ladeparameter angegeben wird.

Daher ist die gegebene Lösung des Problems unten.

  1. Geben Sie den absoluten Pfad zu dem Ort an, an dem die Datei vorhanden ist.
  2. Fügen Sie der integrierten Entwicklungsumgebung ein SonarLint-Plug-in hinzu, das beim Auswerten oder Behandeln der Ausnahmen zum Zeitpunkt des Schreibens hilft.
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

Verwandter Artikel - Java Error