单击按钮后,如何在继续之前等待SwingWorker完成?

时间:2012-03-02 01:55:42

标签: join swingworker

我有以下代码:

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()和实现侦听器的内容,但我不能在此处应用它。

任何帮助?

感谢。

1 个答案:

答案 0 :(得分:0)

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

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

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