我有一个按钮,当点击时播放歌曲但它没有停止,我也无法按任何其他按钮,直到音乐自行停止,即。这首歌结束了。请帮忙! 我的代码如下:
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 :(得分: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();
}