我有一个非常奇怪的问题我无法解决。
我目前正在制作一款游戏,我想在游戏中发声。它应该作为一个jar文件运行,当从eclipse运行时游戏运行得非常好。
SoundPlayer是我在游戏中使用的外部jar库的一部分。然后它需要一个名称,一个文件夹并播放声音。声音位于FTSound对象类所在文件夹的子文件夹中。我检查了jar,声音文件被包含在内,它们和eclipse在同一个地方。现在我遇到了一个奇怪的问题:
当我通过双击运行jar文件时,除了声音之外一切正常。它完全没有了。但是,如果我通过cmd启动jar,声音效果很好。它是完全相同的罐子。
有什么想法吗?我非常感谢你的帮助!
使用以下代码播放声音:
public static void playSound(final FTSound sound) {
new Thread(new Runnable() {
@Override
public void run() {
try{
Clip clip = AudioSystem.getClip();
AudioInputStream inputStream = AudioSystem.getAudioInputStream(sound.getClass().getResource(sound.getFolderName() + "/" + sound.getSoundName()));
clip.open(inputStream);
clip.start();
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
答案 0 :(得分:0)
想到了一些想法。你说过你正在使用eclipse。将文件解压缩到.jar时,请确保将音频文件全部解压缩到同一位置。如果您单击包含声音文件的目录之外的.jar,并且它不是快捷方式,而是在cmd中的同一目录中运行,则可能会导致您所描述的问题。虽然它并没有真正解决问题,但我建议的解决方法是在命令提示符下编写一个蝙蝠来启动游戏。这将为您提供一个可以播放声音的可点击文件。我没有在你的代码中看到任何问题,如果你已经发出声音,那么可能没有任何问题。另一件事:剪辑对象可以很好地运行声音超过几秒钟。如果您正在寻找声音效果,那就太棒了,但除此之外,您应该尝试使用此方法:
new Thread(new Runnable()
{
SourceDataLine soundLine;
public void run()
{
soundLine = null;
int BUFFER_SIZE = 64*1024; // 64 KB
// Set up an audio input stream piped from the sound file.
try {
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(this.getClass().getResource("title.wav"));
AudioFormat audioFormat = audioInputStream.getFormat();
DataLine.Info info = new DataLine.Info(SourceDataLine.class, audioFormat);
soundLine = (SourceDataLine) AudioSystem.getLine(info);
soundLine.open(audioFormat);
soundLine.start();
int nBytesRead = 0;
byte[] sampledData = new byte[BUFFER_SIZE];
while (nBytesRead != -1)
{
nBytesRead = audioInputStream.read(sampledData, 0, sampledData.length);
if (nBytesRead >= 0)
{
// Writes audio data to the mixer via this source data line.
soundLine.write(sampledData, 0, nBytesRead);
}
}
} catch (Exception ex)
{
ex.printStackTrace();
}finally
{
soundLine.drain();
soundLine.close();
}
}
}).start();