我在 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。问题是当整个函数执行时按钮变得可见,这不是我想要的。我希望在函数执行过程中显示按钮。如何将按钮设置为在执行期间可见。
最佳答案
这是因为,只有当 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线程设置加载状态。
- UI线程启动一个新线程来执行命令。此调用后 UI 线程空闲。
- 新线程计算算法
- 一旦新线程完成,它就会请求 UI 线程更新 UI
这样,按钮就不会被卡住。完成后,UI 线程将得到更新。
关于java - 在 java swing onclick 中的 onclick 事件期间显示加载动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16189418/