【问题标题】:How to Stop Current Playing Song When using one thread with JLayer?使用 JLayer 的一个线程时如何停止当前播放的歌曲?
【发布时间】:2011-01-10 11:43:59
【问题描述】:

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

我能做什么?

【问题讨论】:

    标签: java multithreading jlayer


    【解决方案1】:

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

    这是新代码:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-03
        • 2016-10-08
        • 2021-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-25
        相关资源
        最近更新 更多