Java 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) {
    }
}                                    

当我点击这个按钮,它开始播放歌曲,但整个应用程序冻结,我不能点击任何东西。歌曲结束后,一切正常,我可以再次点击其他组件。

有人能帮我一下吗?:)谢谢

这是因为歌曲播放发生在与GUI,或者更具体地说是EDT相同的线程中。因此,当歌曲播放时,GUI不会响应。要解决这个问题,可以这样做:

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

这将在一个单独的线程中播放你的东西。然而,你必须考虑到,因为GUI是响应式的,你可以在歌曲还在播放的时候开始歌曲。

有关详细信息,请参阅

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

相关内容

  • 没有找到相关文章

最新更新