如何解决为什么我的音频播放会冻结ActionListners?
我正在使用此javaPlayer播放声音。
但是在我更大的地方
项目它冻结/忽略几乎每一个更改帧内容的输入JFrame.EXIT_ON_CLOSE
和ActionListner
。我试图在此代码段中重新提出该问题。
btn.addActionListener(e -> System.out.println("Check1"));
不适用于我的按钮。仅当我注释掉整个try/catch-block
时,"Check1"
才会到达。
可能是什么问题呢?我已经尝试将带有Swing.invokeLater的播放器部件发送到另一个线程。
package mainMVC;
import java.io.FileInputStream;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.Player;
public class Alone {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
JButton btn = new JButton("Test");
btn.addActionListener(e -> System.out.println("Check"));
frame.add(btn);
frame.pack();
try (FileInputStream fis = new FileInputStream("src/EgyptianTavernFullofGuitarists_1.mp3"))
{
Player player = new Player(fis);
player.play();
} catch (IOException | JavaLayerException e) {
e.printStackTrace();
}
btn.addActionListener(e -> System.out.println("Check1"));
}
}
解决方法
我不知道有什么问题。我已经在IDE中测试了您的代码,并且可以正常工作。在开始帧期间,音乐播放。 ActionListener
返回Check
,音乐也没有停止,EXIT_ON_CLOSE
不变。
编辑:我发现执行停止,直到文件播放结束。
我通过手动创建线程来管理它。现在,同时打印了“检查”和“检查1”。
File: Audio.java
package mainMVC;
import java.io.FileInputStream;
import java.io.IOException;
import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.Player;
class Audio extends Thread {
public void run(){
try (FileInputStream fis = new FileInputStream("src/EgyptianTavernFullofGuitarists_1.mp3"))
{
Player player = new Player(fis);
player.play();
} catch (IOException | JavaLayerException e) {
e.printStackTrace();
}
}
}
File: Alone.java
package mainMVC;
import javax.swing.JButton;
import javax.swing.JFrame;
public class Alone {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
JButton btn = new JButton("Test");
btn.addActionListener(e -> System.out.println("Check"));
frame.add(btn);
frame.pack();
Audio myThread = new Audio();
myThread.start();
btn.addActionListener(e -> System.out.println("Check1"));
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。