Java 当我播放mp3文件时,Jbuttons嘎嘎作响

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

我正在尝试使用swing制作一个mp3播放器,当我播放一首歌曲时,我的jbutton播放一直处于停滞状态,我无法从我的应用程序中按任何其他按钮。我尝试使用线程,但它不起作用,这是我的播放功能代码

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