代码之家  ›  专栏  ›  技术社区  ›  Guybrush

generated.jar无法加载某些媒体文件

  •  0
  • Guybrush  · 技术社区  · 6 年前

    我用IntLIJ构建了一个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 回复  |  直到 6 年前
        1
  •  1
  •   Guybrush    6 年前

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

    我改变了这个:

    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");
    
        2
  •  0
  •   Gnk    6 年前

    尝试使用getclassloader()

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