Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何阻止音乐播放?_Java_Netbeans - Fatal编程技术网

Java 如何阻止音乐播放?

Java 如何阻止音乐播放?,java,netbeans,Java,Netbeans,我有一个按钮,当点击播放歌曲,但它不会停止,我也不能按任何其他按钮,直到音乐停止自己,即歌曲结束。请帮忙! 我的代码如下: public class Mp3Player { private String filename; private Player player; public Mp3Player(String filename) { this.filename = filename; } public void play() {

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

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

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

一旦它在自己的线程上运行,你可以杀死该线程来停止它,有很多不同的方法来做这件事…我将留作家庭作业=)

创建一个线程来播放歌曲,而不暂停整个程序


顺便说一句,我本想写这篇评论,但我没有足够的信誉点。

您正在事件调度程序线程中执行阻止调用(
Player::play
),这意味着您在
Player.play()

相反,在woker线程中调用它。首先定义一个:


我建议读一些关于线程的书。。
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;
    }
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
     (new PlayerWorker("C:\\Users\\USER\\Desktop\\Echo.mp3")).execute();
}