如何在JLayer中使用一个线程时停止当前播放的歌曲?

时间:2011-01-10 11:44:00

标签: java multithreading jlayer

我最近使用Jlayer在Java中播放mp3歌曲的解决方案。但是Kaleb Brasee的这个解决方案并没有暗示你如何阻止玩家,也就是说怎么可以调用player.close()?

Kaleb的代码是:

Executor executor = Executors.newSingleThreadExecutor();  
executor.execute(new Runnable() { public void run() {  
 /* do something */  
} });

这是我在run()

中输入的代码
if(player != null) player.close();  

try{  
player = new Player(new FileInputStream(musicD.getPath()));  
player.play();  
}catch(Exception e){} 

问题在于,这解决了在播放音乐时保持gui活动的问题(只在另一个线程中 - 我想要的),我无法开始播放另一首歌: - (

我该怎么办?

2 个答案:

答案 0 :(得分:0)

好吧,在调整代码后,我意识到替换当前线程可以解决问题;它允许你开始播放不同的歌曲,即使前一个还没有完成。

这是新代码:

  

执行人执行人; //一个班级成员

每次想要播放歌曲时,只需替换现有歌曲的主题即可 因此,无论其他歌曲的进展如何,您都可以播放另一首歌曲

  

executor = Executors.newSingleThreadExecutor();
  executor.execute(new Runnable(){public void run(){
  / *做点什么* /
  }});

答案 1 :(得分:0)

这与其他问题非常相似,你可以一次只播放一个音频帧,并检查一个标志是否应该暂停,在你的情况下停止播放。

https://stackoverflow.com/a/16738486/2094045