JavaFX Anwendung läuft in eclipse, nicht aber exportiert

jimb0p

Mitglied
Hallo Zusammen,

ich habe eine JavaFX Anwendung geschrieben, welche problemlos in eclipse läuft, nicht jedoch wenn ich sie als runnable Jar exportiere. Wenn ich die jar mit java -jar name.jar ausführe bekomme ich folgende Exception:
Code:
Exception in Application start method
java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(Unknown Source)
        at com.sun.javafx.application.LauncherImpl.launchApplication(Unknown Source)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at sun.launcher.LauncherHelper$FXHelper.main(Unknown Source)
Caused by: java.lang.RuntimeException: Exception in Application start method
        at com.sun.javafx.application.LauncherImpl.launchApplication1(Unknown Source)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$147(Unknown Source)
        at com.sun.javafx.application.LauncherImpl$$Lambda$48/99550389.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.IllegalStateException: Location is not set.
        at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
        at javafx.fxml.FXMLLoader.load(Unknown Source)
        at de.ernst.main.MainApp.initRootLayout(MainApp.java:51)
        at de.ernst.main.MainApp.start(MainApp.java:35)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$153(Unknown Source)
        at com.sun.javafx.application.LauncherImpl$$Lambda$51/43917691.run(Unknown Source)
        at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$166(Unknown Source)
        at com.sun.javafx.application.PlatformImpl$$Lambda$44/1268447657.run(Unknown Source)
        at com.sun.javafx.application.PlatformImpl.lambda$null$164(Unknown Source)
        at com.sun.javafx.application.PlatformImpl$$Lambda$47/867338085.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at com.sun.javafx.application.PlatformImpl.lambda$runLater$165(Unknown Source)
        at com.sun.javafx.application.PlatformImpl$$Lambda$45/1851691492.run(Unknown Source)
        at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
        at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
        at com.sun.glass.ui.win.WinApplication.lambda$null$141(Unknown Source)
        at com.sun.glass.ui.win.WinApplication$$Lambda$37/584634336.run(UnknownSource)

Die Zeilen die Dort erwähnt werden sind folgende:

Java:
public void initRootLayout() {
        try {
            // Load root layout from fxml file.
            FXMLLoader loader = new FXMLLoader();
            loader.setLocation(MainApp.class.getResource("../view/RootLayout.fxml"));
            rootLayout = (BorderPane) loader.load();
 
            // Show the scene containing the root layout.
            Scene scene = new Scene(rootLayout);
            primaryStage.setScene(scene);
            primaryStage.show();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

Kann mir jemand sagen was genau ich beachten muss beim Exportieren, bzw. welchen Fehler ich gemacht habe?

Gruß jimb0p
 
Zuletzt bearbeitet:
Ich würde jetzt mal spontan vermuten, dass du eine benötigte Bibliothek nicht mit dem *jar-File exportierst.
Schau mal bei deinem Projekt unter Properties-->Build Path-->Export und hake da alle Bibliotheken an, die du benötigst, zum Beispiel den FXML-Loader.
Das kann immer auftreten, wenn du eine extra Bibliothek ins Projekt importieren musst, die nicht im Standard-jre drin ist.
 
Hi Tassimmo,

dank dir für deine Antwort. Habe es gerade selbst fixen können. Das Problem war der Pfad zur .fxml. Ich habe nun statt:
[Java]loader.setLocation(MainApp.class.getResource("../view/RootLayout.fxml"));[/Java]
den kompletten Pfad eingetragen:
[Java]loader.setLocation(MainApp.class.getResource("/de/blabla/view/RootLayout.fxml"));[/Java]
Wichtig war hierbei das erste Slash!
 

Zurück
Oben