0

我最近使用了一个解决方案来解决使用 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 处于活动状态的问题(仅在另一个线程中——我想要的),但我无法开始播放另一首歌曲:-(

我能做什么?

4

2 回答 2

0

好吧,在对代码进行了调整之后,我意识到替换当前线程可以解决问题;它允许您开始播放另一首歌曲,即使前一首歌曲尚未完成。

这是新代码:

执行者执行者;//一个类成员

每次您想播放歌曲时都这样做只是替换现有歌曲的线程,
因此您可以播放另一首歌曲而不管另一首歌曲的进度

executor = Executors.newSingleThreadExecutor();
executor.execute(new Runnable() { public void run() {
/* 做某事 */
} });

于 2011-01-10T14:38:57.793 回答
0

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

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

于 2013-05-24T15:39:27.363 回答