【问题标题】:Jbuttons stucked when i play mp3 file当我播放 mp3 文件时 Jbuttons 卡住了
【发布时间】:2018-01-25 20:43:15
【问题描述】:

我正在尝试使用 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);

}

【问题讨论】:

    标签: java swing jbutton mp3 jlayer


    【解决方案1】:

    当我播放歌曲时,我的 jbutton 播放卡住了,我无法按下我的应用程序中的任何其他按钮

    SwingUtilities.invokeLater(fplay);
    

    invokeLater(...) 方法将代码添加到Event Dispatch Thread (EDT) 的末尾。所以这意味着音频仍在EDT 上执行,GUI 无法响应事件。

    相反,您需要启动一个单独的Thread,因此音频不会阻止 GUI 响应事件。

    所以你想将Runnable 传递给Thread 并启动Thread

    阅读 Concurrency 上的 Swing 教程部分,了解有关 EDT 的更多信息。

    我尝试使用线程,但没有成功

    嗯,这是正确的解决方案。我猜不出你做错了什么,尽管你永远不应该有一个空的 catch 块。如果不显示任何内容,如何知道错误是什么?

    Concurrency 上的教程还展示了如何使用 SwingWorker,这可能是一个更好的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-31
      • 2011-05-31
      • 2019-09-27
      • 2017-06-29
      • 1970-01-01
      相关资源
      最近更新 更多