Java 生成的.jar无法加载某些媒体文件
我使用IntelliJ构建了一个java程序。此程序加载图像(.jpg)和音频(.wav)等媒体文件 当我在IDE中运行我的项目时,它工作得很好。 但是,当我生成项目的Java 生成的.jar无法加载某些媒体文件,java,swing,file,loading,embedded-resource,Java,Swing,File,Loading,Embedded Resource,我使用IntelliJ构建了一个java程序。此程序加载图像(.jpg)和音频(.wav)等媒体文件 当我在IDE中运行我的项目时,它工作得很好。 但是,当我生成项目的.jar文件时,图像和音频文件将不会加载 当我尝试加载.wav音频文件时,我得到一个FileNotFoundException 当我尝试加载.jpg文件时,我得到一个IIOException:无法读取输入文件 我像这样加载图像: image = ImageIO.read(ImageScreen.class.getResourc
.jar
文件时,图像和音频文件将不会加载
- 当我尝试加载
音频文件时,我得到一个.wav
FileNotFoundException
- 当我尝试加载
文件时,我得到一个.jpg
IIOException:无法读取输入文件代码>
image = ImageIO.read(ImageScreen.class.getResourceAsStream("/quiz/resources/images/image_1.jpg"));`
在调试器中检查堆栈顶部跟踪时,可以看到:javax.imageio.imageio.read(未知源代码)
在我的应用程序的其他部分中,我可以从类似的目录加载文本文件,如下所示,它也可以在.jar文件中工作:
reader = new BufferedReader(
new InputStreamReader(
WordScreen.class.getResourceAsStream(
"/quiz/resources/words/wordlist.txt")));`
我的项目中只有一个名为quick
的包,我不明白为什么这个包不起作用,因为我指定了一个绝对路径
我已经研究了其他问题,例如,但在我看来,我正在做建议的事情。尝试使用getClassLoader()
谢谢大家的帮助。我设法找到了解决问题的办法 我改变了这一点:
image = ImageIO.read(ImageScreen.class.getResourceAsStream("/quiz/resources/images/image_1.jpg"));
为此:
image = ImageIO.read(this.getClass().getResourceAsStream("/quiz/resources/images/image_1.jpg"));
我现在以同样的方式检索.wav
,它正在工作:
this.getClass().getResourceAsStream("/quiz/resources/audio/audio1.wav");
您是否看到JAR文件中正确位置的
image_1.jpg
?FileNotFoundException
withwav
表示您是从文件系统而不是从JAR加载的。请添加代码以重现问题。@RostislavKrasny是的,我已经检查过了,文件肯定在那里。这是一件值得尝试的事情。另外,为InputStream创建一个中间变量并检查它是否为null。
this.getClass().getResourceAsStream("/quiz/resources/audio/audio1.wav");