我有一个问题与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
(事件调度线程)上的任务必须快速完成;如果他们不这样做,未处理的事件备份,用户界面变得无响应。