在java swing onclick中显示onclick事件期间的加载动画

时间:2013-04-24 10:18:16

标签: java swing onclick

我在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。问题是当整个函数执行时按钮变得可见,这不是我想要的。我希望在执行功能期间显示按钮。如何在执行期间将按钮设置为可见。

2 个答案:

答案 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();
}

以上是这样的:

  1. UI线程设置加载状态。
  2. UI线程启动一个新线程来执行命令。此次调用后,UI线程可以免费使用。
  3. 新线程计算算法
  4. 新线程完成后,它会请求UI线程更新UI
  5. 这样,按钮就不会冻结。完成后,UI线程会更新。

答案 1 :(得分:2)

尝试使用SwingWorker

它具有通过使用publish / process方法与事件调度线程重新同步的内置功能。很容易知道它的done何时具有进度更新功能

查看thisthisthis示例

相关问题