Java jLayer应用程序在播放歌曲时冻结

时间:2013-06-09 19:45:53

标签: java swing jlayer

我遇到了jLayer的问题。我有一个带有启动歌曲代码的按钮:

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {        
    try {
        Player prehravac;
        FileInputStream buff = new FileInputStream(Okno.filename);
        prehravac = new Player(buff);
        prehravac.play();
        if (prehravac != null) {
            prehravac.close();
            this.dispose();
        }
    } catch(Exception e) {

    }
}                                    

当我点击此按钮时,它开始播放歌曲,但整个应用程序冻结,我无法点击任何内容。当歌曲结束时,它没关系,我可以再次点击其他组件。

有人可以帮助我吗? :)谢谢

2 个答案:

答案 0 :(得分:3)

这是因为歌曲播放发生在与GUI相同的线程中,或者更具体地说是EDT。因此,当歌曲播放时,GUI不响应。要解决此问题,请执行以下操作:

new Thread(){
  run(){
    //Your play code
  }
}.start();

这将在一个单独的线程中播放你的东西。但是,您必须考虑到,由于GUI具有响应性,您可以在歌曲仍在播放时启动歌曲。

有关详细信息,请参阅this

答案 1 :(得分:2)

EDT (事件派发线程)上的任务必须快速完成;如果他们不这样做,未处理的事件将备份,用户界面将无法响应。