5

所以我一直在制作游戏,并决定要为它制作音效。我可以很好地播放声音,直到我将类文件和(和 wav 音频文件)打包到 jar 中,却发现它找不到文件。我getClass().getResource("sounds/enemyExplode.wav")用来获取文件。我应该使用其他方法吗?提前致谢!

4

3 回答 3

3

在一个 jar 中,我了解到使用 getResourceAsStream() 效果更好。如果您使用的是 AudioInputStream,那么它也同样有效:

AudioInputStream ais = AudioSystem.getAudioInputStream
(Sound.class.getResourceAsStream(fileName));

这就是文件名的外观(soundbase,在您的情况下是“声音”):

"/" + soundbase + "/" + file.wav

我有一个功能齐全的声音课程,几年前我在网上的某个地方找到了它,效果很好。我稍微修改了它,但如果你想让我发布它,它应该适用于大多数情况。

于 2013-07-08T21:56:56.153 回答
3

The class loader's getResource() method operates on resources within the class path. If you have the sounds at the following location in the JAR:

/sounds/enemyExplode.wav

Then you need to use a leading slash in front of the path (just as above) in that call.

Remember a JAR file is really nothing more than a packaged up version of the filesystem (same format as a zip) and the class loader operates upon it as it would if it were a filesystem.

于 2012-12-21T02:11:30.120 回答
1

首先,确保您的声音实际打包在 jar 文件中。您可以使用任何支持 zip 的存档器打开 jar 文件。

其次,当您调用时,blabla.getClass().getResources("sounds")您相对于 blabla 的类路径进行操作,这意味着包含 blabla 的完整包名将被添加到“声音”以解析 jar 文件中的完整路径。

如果要指定绝对路径,只需在路径前加上斜杠:blabla.getClass().getResources("/sound")

于 2012-12-21T03:38:05.897 回答