所以我一直在制作一款游戏,并决定要为它制作音效。我可以播放声音,直到我将类文件和(以及wav音频文件)打包到jar中,并且发现它无法找到文件。我正在使用getClass().getResource("sounds/enemyExplode.wav")
来获取该文件。我应该使用不同的方法吗?
提前致谢!
答案 0 :(得分:3)
类加载器的 getResource()方法对类路径中的资源进行操作。如果您在JAR中的以下位置发出声音:
/sounds/enemyExplode.wav
然后你需要在该调用中使用路径前面的前导斜杠(如上所述)。
请记住,JAR文件实际上只不过是文件系统的打包版本(与zip格式相同),并且类加载器对它进行操作,就像它是文件系统一样。
答案 1 :(得分:3)
在jar中,我已经了解到使用getResourceAsStream()会更好。如果您正在使用AudioInputStream,那么它也可以正常工作:
AudioInputStream ais = AudioSystem.getAudioInputStream
(Sound.class.getResourceAsStream(fileName));
这就是文件名的外观(soundbase,在你的情况下是“声音”):
"/" + soundbase + "/" + file.wav
我有一个功能齐全的声音课程,几年前我在网上找到了一个非常好的。我稍微修改了它,但如果你想让我发布它,它应该适用于大多数场景。
答案 2 :(得分:1)
首先,确保您的声音实际打包在jar文件中。您可以使用任何支持zip的存档程序打开jar文件。
其次,当你调用blabla.getClass().getResources("sounds")
相对于blabla的类路径进行操作时,这意味着包含blabla的完整包名称将被添加到“声音”以解析jar中的完整路径文件。
如果要指定绝对路径,只需在路径前加斜杠:blabla.getClass().getResources("/sound")