我正在试着为游戏做背景音乐。由于某种原因,歌曲在第一次播放后将不再播放。我做错了什么?我如何才能纠正它?我知道我可以使用.loop(),但我希望它永远重复,.loop()最终会停止。
public class playSong
extends Thread
{
Clip clip=null;
playSong()
{
start();
}
@Override
public void run()
{
while(true)
{
if(clip==null)
{
playSound("fax.wav");
}
else if(!clip.isRunning())
{playSound("fax.wav");}
}
}
public void playSound(String name)
{
try {
File file=new File(this.getClass().getResource(name).getFile());
AudioInputStream audio = AudioSystem.getAudioInputStream(file);
clip = AudioSystem.getClip();
clip.open(audio);
clip.start();
} catch (Exception e) {
System.out.print(e.getMessage());
}
}
}发布于 2013-05-22 18:03:03
最好使用Clip中已存在的循环选项。
clip.loop(Clip.LOOP_CONTINUOUSLY);这里已经有了一个描述这一点的答案:Audio clip looping。它应该通过保持线程运行来修复您所描述的endling循环问题。
更新:
这是一个完整的工作示例,由您的代码修改而成。
public class PlaySong extends Thread
{
Clip clip=null;
public PlaySong()
{
start();
}
@Override
public void run()
{
playSound("fax.wav");
for(;;)
{
try
{
Thread.sleep(1000);
}
catch(Exception e)
{
}
}
}
public void playSound(String name)
{
try
{
File file = new File(this.getClass().getResource(name).getFile());
AudioInputStream audio = AudioSystem.getAudioInputStream(file);
clip = AudioSystem.getClip();
clip.open(audio);
clip.start();
clip.loop(Clip.LOOP_CONTINUOUSLY);
}
catch(Exception e)
{
System.out.print(e.getMessage());
}
}
}https://stackoverflow.com/questions/16688847
复制相似问题