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

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

最佳答案

这是因为,只有当 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

这样,按钮就不会被卡住。完成后,UI 线程将得到更新。

关于java - 在 java swing onclick 中的 onclick 事件期间显示加载动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16189418/

相关文章:

java - 如何在 JPanel 中绘制形状?

JavaScript按钮onclick不起作用

Java JScrollPane - 多个组件

java - 初学者循环问题 - while ... do

java - ColdFusion 或 Java 中的 CSS 解析器?

java - ClassNotFoundException : oracle. jdbc.OracleDriver

java - 是否可以在 JTextField 上为文本加下划线?如果可以,怎么做?

javascript - 单击页面加载时的 HTML 按钮/链接

php - DIV onClick事件强制下载一个pdf文件

JavaFX webview 不保存 cookie