【问题标题】:Generated .jar is unable to load some media files生成的 .jar 无法加载某些媒体文件
【发布时间】:2019-02-25 22:43:42
【问题描述】:

我使用 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,但在我看来,我正在按照建议做。

【问题讨论】:

  • 您在 JAR 文件中的正确位置看到 image_1.jpg 了吗?
  • FileNotFoundExceptionwav 表示您是从文件系统加载,而不是从 JAR 加载。请添加代码以重现问题。
  • @RostislavKrasny 是的,我已经检查过了,文件肯定在那里。

标签: java swing file loading embedded-resource


【解决方案1】:

尝试使用 getClassLoader()

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

【讨论】:

  • 这是一回事。此外,为 InputStream 创建一个中间变量并检查它是否为空。
【解决方案2】:

感谢大家的帮助。我已经设法解决了我的问题。

我已经改变了这个:

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

【讨论】:

    猜你喜欢
    • 2017-09-22
    • 1970-01-01
    • 2018-12-23
    • 2016-05-03
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 2018-02-25
    • 1970-01-01
    相关资源
    最近更新 更多