Java 生成的.jar无法加载某些媒体文件

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

我使用IntelliJ构建了一个java程序。此程序加载图像(.jpg)和音频(.wav)等媒体文件

当我在IDE中运行我的项目时,它工作得很好。 但是,当我生成项目的
.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
with
wav
表示您是从文件系统而不是从JAR加载的。请添加代码以重现问题。@RostislavKrasny是的,我已经检查过了,文件肯定在那里。这是一件值得尝试的事情。另外,为InputStream创建一个中间变量并检查它是否为null。
this.getClass().getResourceAsStream("/quiz/resources/audio/audio1.wav");