如何停止播放音乐?

时间:2014-11-08 10:50:07

标签: java netbeans

我有一个按钮,当点击时播放歌曲但它没有停止,我也无法按任何其他按钮,直到音乐自行停止,即。这首歌结束了。请帮忙! 我的代码如下:

public class Mp3Player {

    private String filename;
    private Player player;


    public Mp3Player(String filename) {
    this.filename = filename;
    }


    public void play() {
 try {  

         BufferedInputStream buffer = new BufferedInputStream(new FileInputStream(filename));
         player = new Player(buffer);
         player.play();

 }
 catch (FileNotFoundException | JavaLayerException e) {

     System.out.println(e);
 }

    }


    }

这是在按钮中:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         

         Mp3Player mp3 = new Mp3Player("C:\\Users\\USER\\Desktop\\Echo.mp3");
         mp3.play();

    }

3 个答案:

答案 0 :(得分:0)

在另一个线程上调用播放器#播放,这将允许您的歌曲播放,同时允许您的GUI仍然工作(Swing中的常见方法)。

一旦它在自己的线程上运行,你可以杀掉那个线程来阻止它,有很多不同的方法可以做到这一点......我会留下来做作业=)

答案 1 :(得分:0)

创建thread播放歌曲而不暂停整个节目。

PS。我会把它写成评论,但我没有足够的声誉点。

答案 2 :(得分:0)

您正在事件调度程序线程中执行阻止调用(Player::play),这意味着您阻止事件处理(点击按钮和按钮),直到player.play()返回。

相反,请在woker线程中调用它。首先定义SwingWorker

class PlayerWorker extends SwingWorker<Void, Void> {
    private final Mp3Player mp3;

    public PlayerWorker(String filename) { 
         mp3 = new Mp3Player(filename);
    }

    @Override
    protected Void doInBackground() {
         mp3.play();
         return null;
    }
}

请注意使用Void(大写V)和return null。然后,将其称为:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
     (new PlayerWorker("C:\\Users\\USER\\Desktop\\Echo.mp3")).execute();
}