当我尝试使用IntelliJ IDEA构建和运行按钮运行时,应用程序运行良好。但是在我将项目构建到可执行的javafx jar工件并尝试使用java -jar AppName.jar
从命令行运行之后,它显示以下错误:
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
以下是第60至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);
似乎资源在第二个ln上分配为null。我是否在加载过程中出错?从jar可执行文件运行时,情况有所不同吗?
提前致谢!
答案 0 :(得分:3)
Jar文件系统不支持使用..的相对路径 - 它在intellij,netbeans,eclipse中工作,因为你从当时的本机文件系统加载。
答案 1 :(得分:0)
通过像这样的资源加载:
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");
}
除了我的命令中的前导/之外,看起来很相似。你确定你的ui-package位于当前课程的一个包中吗?