2014-11-08 124 views
0

我有一个按钮,当点击播放歌曲时,它不会停止,也不能按任何其他按钮,直到音乐自行停止,歌曲结束。请帮忙! 我的代码如下:如何阻止音乐播放?

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(); 

    } 
+0

我建议阅读有关线程.. http://docs.oracle.com/javase/tutorial/essential/concurrency/ – vefthym 2014-11-08 10:55:15

+0

什么是'Player'? – 2014-11-08 11:16:18

回答

0

调用播放器#播放,这将让你的歌曲,同时让你的GUI仍然正常发挥(Swing中常见的方法)。

一旦它在它自己的线程中运行,你可以杀死线程停止它,有很多不同的方法来做到这一点...我将离开作业=)

0

创建thread在不暂停整个节目的情况下播放歌曲。

PS。我会写这个作为评论,但我没有足够的声望点。

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(); 
}