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