javafx resource cannot be loaded when running from jar


Question

The application runs well when I attempt to run with the IntelliJ IDEA build and run button. But after I have build the project into an executable javafx jar artifact and attempted to run from the commandline with java -jar AppName.jar it shows the following error :

    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:483)
    at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:367)
    at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:305)
    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:483)
    at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: java.lang.RuntimeException: Exception in Application start method
    at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:894)
    at com.sun.javafx.application.LauncherImpl.access$000(LauncherImpl.java:56)
    at com.sun.javafx.application.LauncherImpl$1.run(LauncherImpl.java:158)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException
    at main.MainApplication.start(MainApplication.java:62)
    at com.sun.javafx.application.LauncherImpl$8.run(LauncherImpl.java:837)
    at com.sun.javafx.application.PlatformImpl$7.run(PlatformImpl.java:335)
    at com.sun.javafx.application.PlatformImpl$6$1.run(PlatformImpl.java:301)
    at com.sun.javafx.application.PlatformImpl$6$1.run(PlatformImpl.java:298)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl$6.run(PlatformImpl.java:298)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher`.java:95)
    at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
    at com.sun.glass.ui.gtk.GtkApplication.access$200(GtkApplication.java:48)
    at com.sun.glass.ui.gtk.GtkApplication$6$1.run(GtkApplication.java:149)
    ... 1 more

Here is my code from line 60 to 63

    FXMLLoader fxmlLoader = new FXMLLoader();
    URL resource = getClass().getResource("../ui/note_main.fxml");
    InputStream inputStream = resource.openStream(); //THIS HERE IS THE NULLPOINTEREXCEPTION
    Parent root = fxmlLoader.load(inputStream);

it seems that the resource is assigning to null on the second ln. Am I doing something wrong with the loading process? Does things work differently when running from a jar executable ?

Thanks in advance !

1
3
7/19/2014 1:44:30 PM

Accepted Answer

Jar filesystem does NOT support relative paths with .. - it works in intellij, netbeans, eclipse because there you load from then native filesystem.

3
7/21/2014 7:15:54 AM

I'm loading by ressources like this:

FXMLLoader statusbarLoader = new FXMLLoader(
                StatusbarController.class.getResource("/../../../../StatusbarView.fxml"));
        try {
            statusbarPane = (Pane) statusbarLoader.load();
        } catch (IOException e) {
            logger.error(e);
            Starter.terminateApplicationBecauseOfError("Problems loading StatusbarView.fxml");
        }

Looks similay except the leading / in my command. Are you sure your ui-package is located one package about your current class?


Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon