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

时间:2018-09-21 13:46:12

标签: java swing file loading embedded-resource

我使用IntelliJ构建了一个Java程序。该程序将加载媒体文件,例如图像(.jpg)和音频(.wav)。

当我在IDE中运行项目时,它运行良好。 但是当我生成项目的.jar文件时,图像和音频文件将不会加载。

  • 当我尝试加载.wav音频文件时,我得到了FileNotFoundException
  • 当我尝试加载.jpg文件时,我得到了IIOException: Can't read the input file!

我正在像这样加载图像:

image = ImageIO.read(ImageScreen.class.getResourceAsStream("/quiz/resources/images/image_1.jpg"));`

当我在调试器中检查堆栈跟踪的顶部时,我可以看到:javax.imageio.ImageIO.read(Unkown Source)

在我的应用程序的其他部分,我可以从类似的目录中加载文本文件,并且它也可以在.jar文件中工作:

reader = new BufferedReader(
    new InputStreamReader(
        WordScreen.class.getResourceAsStream(
            "/quiz/resources/words/wordlist.txt")));`

我的项目中只有一个名为quiz的软件包,我不知道为什么它不起作用,因为我指定了绝对路径。

我看过其他问题,例如this one,但我认为我正在做建议的事情。

2 个答案:

答案 0 :(得分:1)

感谢大家的帮助。我设法找到了解决问题的方法。

我更改了此内容

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");

答案 1 :(得分:0)

尝试使用getClassLoader()

this.getClass().getClassLoader().getResourceAsStream...