Java 当我播放mp3文件时,Jbuttons嘎嘎作响
我正在尝试使用swing制作一个mp3播放器,当我播放一首歌曲时,我的jbutton播放一直处于停滞状态,我无法从我的应用程序中按任何其他按钮。我尝试使用线程,但它不起作用,这是我的播放功能代码Java 当我播放mp3文件时,Jbuttons嘎嘎作响,java,swing,jbutton,mp3,jlayer,Java,Swing,Jbutton,Mp3,Jlayer,我正在尝试使用swing制作一个mp3播放器,当我播放一首歌曲时,我的jbutton播放一直处于停滞状态,我无法从我的应用程序中按任何其他按钮。我尝试使用线程,但它不起作用,这是我的播放功能代码 public static void fplay() { Runnable fplay = new Runnable() { @Override public void run() { // TODO Auto-generate
public static void fplay()
{
Runnable fplay = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
if(!songs.isEmpty())
{
for(int j=0;j<songs.size();j++)
{
System.out.println(path+"\\"+songs.get(j));
file = new File(path+"\\"+songs.get(j));
try {
fis = new FileInputStream(file);
player = new AdvancedPlayer(fis);
graphics.label.setText(songs.get(j).toString());
player.play();
}catch(Exception e) {
}
}
}else
JOptionPane.showMessageDialog(null, "No directory selected","Error",
JOptionPane.ERROR_MESSAGE);
}};
SwingUtilities.invokeLater(fplay);
}
publicstaticvoidfplay()
{
Runnable fplay=new Runnable(){
@凌驾
公开募捐{
//TODO自动生成的方法存根
如果(!songs.isEmpty())
{
对于(int j=0;j
当我播放一首歌时,我的jbutton播放一直处于停滞状态,我无法从我的应用程序中按下任何其他按钮
invokeLater(…)方法将代码添加到事件调度线程(EDT)
的末尾。因此这意味着音频仍在EDT
上执行,GUI无法响应事件
相反,您需要启动一个单独的线程
,这样音频不会阻止GUI响应事件
因此,您希望将Runnable
传递给线程
,然后启动线程
有关EDT的更多信息,请阅读上Swing教程的部分
我尝试使用线程,但没有成功
好吧,这是正确的解决方案。我猜不出你做错了什么,尽管你不应该有一个空的catch块。如果你不显示任何内容,你怎么知道错误是什么
并发性
教程还介绍了如何使用SwingWorker,这可能是一个更好的解决方案
SwingUtilities.invokeLater(fplay);