Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java InputStream赢得';无法在可运行的JAR中读取图像_Java_Image_Imageview_Inputstream_Runnable Jar - Fatal编程技术网

Java InputStream赢得';无法在可运行的JAR中读取图像

Java InputStream赢得';无法在可运行的JAR中读取图像,java,image,imageview,inputstream,runnable-jar,Java,Image,Imageview,Inputstream,Runnable Jar,我正在为D&D编写一个字符生成器,但我发现自己处于一种奇怪的情况,因为InputStream类似乎适用于某些文件,所以我得到了:java.lang.NullPointerException:输入流不能为null 我正在使用InputStream将javafx图像构造函数加载到ImageView构造函数中 [新图像视图(新图像(getClass().getResourceAsStream(..)]; 当我加载一些.jpeg图像时,它会工作,但当我对.png图像执行相同的处理时,它不会工作 我尝试过

我正在为D&D编写一个字符生成器,但我发现自己处于一种奇怪的情况,因为InputStream类似乎适用于某些文件,所以我得到了:java.lang.NullPointerException:输入流不能为null

我正在使用InputStream将javafx图像构造函数加载到ImageView构造函数中 [新图像视图(新图像(getClass().getResourceAsStream(..)]; 当我加载一些.jpeg图像时,它会工作,但当我对.png图像执行相同的处理时,它不会工作

我尝试过这里介绍的许多关于StackOverflow的解决方案,但似乎没有一个解决方案与我的问题太接近,或者根本没有帮助:

  • 创建源文件夹并从中检索图像
  • 将图像文件移动到类包中
  • 阅读所有可能的文档
这段代码运行良好,基本上读取图像并将其作为一些按钮的背景

ImageView-imv;
for(int i=1;i java-jar Dnd.jar)
宽度:1238.667高度:720.0
应用程序启动方法中的异常
线程“main”java.lang.reflect.InvocationTargetException中出现异常
位于java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
位于java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(未知源)
位于java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(未知源)
位于java.base/java.lang.reflect.Method.invoke(未知源)
位于org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:61)
原因:java.lang.RuntimeException:应用程序启动方法中的异常
位于javafx.graphics/com.sun.javafx.application.LaunchImpl.launchApplication1(未知源)
位于javafx.graphics/com.sun.javafx.application.launchempl.lambda$launchApplication$2(未知源)
位于java.base/java.lang.Thread.run(未知源)
原因:java.lang.NullPointerException:输入流不能为null
位于javafx.graphics/javafx.scene.image.image.validateInputStream(未知源)
位于javafx.graphics/javafx.scene.image.image。(未知源)
位于dnd.userinterface.javafx.scene.CharactersPane.(CharactersPane.java:55)
位于dnd.userinterface.javafx.scene.DndPane.bookPane(DndPane.java:199)
位于dnd.userinterface.javafx.scene.DndPane.initPane(DndPane.java:99)
位于dnd.userinterface.javafx.scene.DndPane。(DndPane.java:70)
位于dnd.userinterface.javafx.application.DNDApplication.start(DNDApplication.java:52)
在javafx.graphics/com.sun.javafx.application.launchempl.lambda$launchApplication1$9(未知来源)
位于javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$11(未知来源)
位于javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$9(未知来源)
位于java.base/java.security.AccessController.doPrivileged(本机方法)
位于javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(未知来源)
在javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(未知源代码)
在javafx.graphics/com.sun.glass.ui.win.WinApplication.\u runLoop(本机方法)
位于javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(未知来源)
…还有一个
它明确地说我在读取比赛图像时得到了一个空的InputStream

注意:我实际上提取了jar所在的RaceImages文件夹,并仅通过命令行运行它(而不是我想要的解决方案),运行应用程序

如果图像位于
src/img/
文件夹中,则路径应为
/img/

重要的是,您要么构建jar(这是一个有效的zip文件),以便图像条目在代码中具有路径,要么查看jar文件(例如,whith 7zip),并相应地更正代码中的图像路径。

我通过try-catch发现了问题,我为之前没有这么做感到羞愧

最终,唯一的错误是图片名称中的一个大写字母被Eclipse绕过,但在从.jar运行时导致NullPointerException

我认为这已经解决,不需要进一步干预

这是一张显示问题的图片


如图()所示,图像不是存储在src中,而是存储在imgsh中。Windows的乐趣在于忽略文件路径中大小写的差异。
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