【问题标题】:After clicking a button, how do I wait for SwingWorker to finish before proceeding?单击按钮后,如何等待 SwingWorker 完成后再继续?
【发布时间】:2012-03-02 01:55:41
【问题描述】:

我有以下代码:

public class FileLoader extends SwingWorker(Void, Void) {
    @Override
    private Void doInBackground() {
        loadFiles();
    }
}

public class LogInPage {

    private FileLoader fileLoader = new FileLoader();

    public LogInPage() {
        fileLoader.execute();
    }

    loginButtonActionPerformed(ActionEvent evt) {
        //wait for files to finish loading
        //while displaying a waiting cursor

        showMainForm();
    }
}

我的问题是:

单击按钮后,我希望在显示主窗体之前先加载所有文件(同时显示沙漏光标和进度条)。

我以前用 Thread 的 join() 做过这个,但不能用 SwingWorker 做同样的事情。

我已经阅读了关于覆盖 done() 和实现侦听器的信息,但我不能在这里应用它。

有什么帮助吗?

谢谢。

【问题讨论】:

    标签: join swingworker


    【解决方案1】:

    从你所说的和你想的相反,我认为你实际上可以使用 SwingWorker 的 done() 方法。在执行()之前,禁用按钮,开始一个忙碌的动画,无论如何,然后在done()方法中,做任何你需要做的事情来继续程序。这就是它的用途:-)

    您还应该查看 SwingWorker.publish() 和 process() 以发送和接收进度条事件。

    另请参阅:How do I wait for a SwingWorker's doInBackground() method?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-25
      • 2019-11-01
      • 2021-05-06
      • 2021-05-21
      • 2015-10-03
      • 2013-11-25
      • 2014-02-03
      相关资源
      最近更新 更多