我正在制作一个游戏,并决定为它添加音效。我可以播放声音,直到我将类文件和wav音频文件打包成jar,才发现它找不到这些文件。我使用getClass().getResource("sounds/enemyExplode.wav")
获取文件。我是否应该使用不同的方法?提前感谢您!
在一个jar包中,我发现使用getResourceAsStream()方法可以更好地工作。如果你正在使用AudioInputStream,那么这个方法同样适用:
AudioInputStream ais = AudioSystem.getAudioInputStream
(Sound.class.getResourceAsStream(fileName));
"/" + soundbase + "/" + file.wav
我有一个完全运作正常的声音类,几年前在某个地方在网上找到的,它工作得非常好。我稍微修改了它,但如果你要我发布它,它应该在大多数情况下都能正常工作。
/sounds/enemyExplode.wav
然后,在调用中需要在路径前面使用一个前导斜杠(就像上面一样)。
请记住,JAR文件实际上只是文件系统的打包版本(与zip格式相同),类加载器以与文件系统相同的方式对其进行操作。
blabla.getClass().getResources("sounds")
时,您是相对于blabla的类路径操作的,这意味着包含blabla的完整包名称将被添加到"sound"以解析JAR文件中的完整路径。blabla.getClass().getResources("/sound")
。
sounds
文件夹应该放在src
文件夹内。 - Eng.FouadgetClass().getResource()
接受一个相对路径(到包),如果要获得一个“绝对”路径(在JAR内),则需要前导/
。 - biziclopcode
new AePlayWave(getClass().getResource("/sounds/enemyExplode.wav").toString().split(":")[2]).start();code
code
getClass().getResource("/sounds/enemyExplode.wav").toString().split(":")[1]code
获取文件的URI,然后将其转换为字符串,然后在“:”之后拆分它,因为我使用的类不喜欢它在那里,然后它返回第二部分。 - DudeOfAwesome