我在Java Swing中有一个onClick
事件。
private void fastForward(java.awt.event.MouseEvent evt) {
loading.setVisible(true);
//some time consuming algorithm
loading.setVisible(false);
}
在其中,我执行的操作耗费大量时间,因此我想显示加载动画。
我创建了一个带有图标的按钮,其中加载了gif,我将按钮的可见性设置为false。在onClick
事件中,我将可见性设置为true。问题是当整个函数执行时按钮变得可见,这不是我想要的。我希望在执行功能期间显示按钮。如何在执行期间将按钮设置为可见。
答案 0 :(得分:4)
这是因为,只有一旦UI线程获得空闲,它才能更新UI。这是你需要做的:
private void fastForward(java.awt.event.MouseEvent evt) {
loading.setVisible(true);
new Thread(new Runnable(){
@Override
public void run(){
//time consuming algorithm.
if(done){
SwingUtilities.invokeLater(new Runnable(){
@Override public void run(){
loading.setVisible(false);
}
});
}
}
}).start();
}
以上是这样的:
这样,按钮就不会冻结。完成后,UI线程会更新。
答案 1 :(得分:2)