Java jLayer应用程序在播放歌曲时冻结
我对jLayer有问题。我有一个按钮,上面有开始歌曲的代码:Java jLayer应用程序在播放歌曲时冻结,java,swing,jlayer,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);
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在同一线程中进行,或者更具体地说是在GUI中进行。因此,当播放歌曲时,GUI不响应。要解决此问题,请执行以下操作:
new Thread(){
run(){
//Your play code
}
}.start();
这将在单独的线程中播放您的内容。但是,您必须注意,由于GUI是有响应的,所以您可以在歌曲仍在播放时启动歌曲
有关更多信息,请参见这是因为歌曲播放与GUI在同一线程中进行,或者更具体地说是GUI。因此,当播放歌曲时,GUI不响应。要解决此问题,请执行以下操作:
new Thread(){
run(){
//Your play code
}
}.start();
这将在单独的线程中播放您的内容。但是,您必须注意,由于GUI是有响应的,所以您可以在歌曲仍在播放时启动歌曲
有关更多信息,请参阅事件调度线程上的任务必须快速完成;否则,未处理的事件将备份,用户界面将变得无响应。事件调度线程上的任务必须快速完成;如果没有,未处理的事件将备份,用户界面将变得无响应。这似乎是在EDT中执行的,因此这就是为什么冻结到歌曲完成,尝试使用SwingWorker执行此操作。这似乎是在EDT中执行的,这就是为什么冻结到歌曲完成,尝试使用SwingWorker执行此操作