【问题标题】:Java jLayer application freezes while playing songJava jLayer 应用程序在播放歌曲时冻结
【发布时间】:2013-06-09 19:45:52
【问题描述】:

我对 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) {

    }
}                                    

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

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

【问题讨论】:

  • 它似乎是在 EDT 中执行的,所以这就是为什么冻结直到歌曲结束,尝试使用 SwingWorker

标签: java swing jlayer


【解决方案1】:

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

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

这将在单独的线程中播放您的内容。但是,您必须注意,由于 GUI 是响应式的,因此您可以在歌曲仍在播放时开始播放歌曲。

更多信息请见this

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多