После нажатия кнопки, как мне дождаться окончания работы SwingWorker, прежде чем продолжить? - PullRequest
0 голосов
/ 02 марта 2012

У меня есть следующий код:

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

Мой вопрос будет:

После нажатия кнопки я бы хотел, чтобы все файлы были загружены первыми (при отображении курсора песочных часов и индикатора выполнения) перед отображением основной формы.

Я делал это раньше с помощью метода join (), но не мог сделать то же самое с SwingWorker.

Я читал о переопределении done () и реализации слушателей, но я не могу применить его здесь.

Любая помощь?

Спасибо.

1 Ответ

0 голосов
/ 05 марта 2012

Исходя из того, что вы говорите, и вопреки тому, что вы думаете, я думаю, вы действительно можете использовать метод done () SwingWorker.Перед execute () отключите кнопку, запустите занятую анимацию, что угодно, затем в методе done () сделайте все, что вам нужно, чтобы продолжить программу.Вот для чего: -)

Вам также следует обратиться к SwingWorker.publish () и process () для отправки и получения событий индикатора выполнения.

См. Также: Какмне ждать метода SwInWorker doInBackground ()?

...