我正在为D&D编写一个字符构建器,但我发现自己处于一个奇怪的情况,因为InputStream类似乎适用于某些文件,然后我得到:java.lang.NullPointerException:输入流不能为null
我正在使用InputStream将javafx Image构造加载到ImageView构造函数中[new ImageView(new Image(getClass()。getResourceAsStream(..)))];它在我加载一些.jpeg图像时有效,但是当我在.png图像上执行相同的处理时它不会
我在StackOverflow上尝试了很多这里描述的解决方案,但似乎没有一个解决方案太过接近我的问题或者根本没有帮助:
- 创建一个Source文件夹并从那里检索图像
- 将图像文件移动到类包
- 阅读所有可能的文档
这段代码工作正常,它基本上读取图像并将它们作为某些按钮的背景
ImageView imv;
for(int i = 1; i <= 8; i++) {
imv = new ImageView(new Image(getClass().getResourceAsStream("/ButtonImages/" + i + ".jpeg")));
...
这是构建结果(适用于JAR,因为它适用于Eclipse)
然后这段代码,应该加载所有的D&D比赛图像
this.imv = new ImageView(new Image(getClass().getResourceAsStream("/RaceImages/" + displayname + ".png")));
它确实在Eclipse中显示出来,但在Runnable jar上报告错误
这是我的项目结构的图像。
这是我在执行Runnable JAR时期望发生的事情
这就是我得到的:
C:\Users\*****\Desktop>java -jar Dnd.jar
Width: 1238.6666666666667 Height: 720.0
Exception in Application start method
Exception in thread "main" java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:61)
Caused by: java.lang.RuntimeException: Exception in Application start method
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(Unknown Source)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException: Input stream must not be null
at javafx.graphics/javafx.scene.image.Image.validateInputStream(Unknown Source)
at javafx.graphics/javafx.scene.image.Image.<init>(Unknown Source)
at dnd.userinterface.javafx.scene.CharactersPane.<init>(CharactersPane.java:55)
at dnd.userinterface.javafx.scene.DndPane.bookPane(DndPane.java:199)
at dnd.userinterface.javafx.scene.DndPane.initPane(DndPane.java:99)
at dnd.userinterface.javafx.scene.DndPane.<init>(DndPane.java:70)
at dnd.userinterface.javafx.application.DNDApplication.start(DNDApplication.java:52)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(Unknown Source)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$11(Unknown Source)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$9(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(Unknown Source)
at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(Unknown Source)
... 1 more
明确地说我在阅读比赛图像时得到一个空的InputStream
注意:我实际上提取了jar所在的Race Images文件夹,并仅通过命令行运行它(不是我想要的解决方案),运行应用程序