Java jar文件中的声音问题
我有一个很奇怪的问题,我无法解决 我目前正在制作一个游戏,我希望游戏中有声音。它应该作为一个jar文件运行,当从eclipse运行它时,游戏运行得非常好 SoundPlayer是我在游戏中使用的外部jar库的一部分。然后,它接受一个名称、一个文件夹并播放声音。声音位于FTSound对象类所在文件夹的子文件夹中。我已经检查了jar,并且包含了声音文件,它们与eclipse中的位置相同。现在谈谈我遇到的奇怪问题: 当我双击jar文件来运行它时,除了声音之外,其他一切都正常工作。它完全不见了。但是,如果我通过cmd启动jar,声音工作正常。这是同一个罐子 有什么想法吗?我非常感谢你的帮助 使用以下代码播放声音:Java jar文件中的声音问题,java,eclipse,audio,jar,javasound,Java,Eclipse,Audio,Jar,Javasound,我有一个很奇怪的问题,我无法解决 我目前正在制作一个游戏,我希望游戏中有声音。它应该作为一个jar文件运行,当从eclipse运行它时,游戏运行得非常好 SoundPlayer是我在游戏中使用的外部jar库的一部分。然后,它接受一个名称、一个文件夹并播放声音。声音位于FTSound对象类所在文件夹的子文件夹中。我已经检查了jar,并且包含了声音文件,它们与eclipse中的位置相同。现在谈谈我遇到的奇怪问题: 当我双击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();
}
我想到了一些想法。你说你正在使用eclipse。将文件解压缩到.jar时,请确保音频文件都解压缩到同一位置。如果您在包含声音文件的目录之外单击.jar,但它不是快捷方式,而是在cmd的同一目录中运行,这可能会导致您描述的问题。虽然它并没有真正解决这个问题,但我建议的一个解决方法是编写一个bat,在命令提示符下启动游戏。这将为您提供一个可单击的文件,该文件也会播放声音。我看不到你的代码中有任何问题,如果你已经得到了播放的声音,那么可能没有任何问题。还有一件事:剪辑对象在几秒钟内不能正常运行。如果您正在寻找音效,这是很好的,但除此之外,您应该尝试使用以下方法:
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();
谢谢你的回答!不过我不知道我该怎么解决这个问题。我尝试了一段时间,也尝试了你的解决方案,现在当我双击罐子时,我得到了声音。现在的问题是,声音工作了一段时间,然后突然间它清除了计算机上的所有声音,因此我需要重新启动它。我想我的声卡可能是原因,但我不确定。是的,这听起来像是你电脑特有的问题。不过,这种方法有时很有趣。在我朋友的电脑上,如果关机,它会打开他的声音;他有一个alienware。然而,在我的东芝上,它工作得非常好。但我不知道为什么。为了更快地得到更好的帮助,请发布一个。