Как мне дождаться метода doInBackground () SwingWorker?

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

import java.lang.InterruptedException;
import javax.swing.SwingWorker;

public class Test
{
    private JDialog window;

    public Test
    {
        // instantiate window
    }

    private class Task extends SwingWorker<Void, Void>
    {
        public Void doInBackground()
        {
            try { Thread.currentThread().sleep(5000); }
            catch(InterruptedException e) {}
            return null;
        }
    }

    public void doTask()
    {
        Task task = new Task();
        task.execute();
    }

    protected void process()
    {
        // update various GUI components here
    }

    public static void main(String args[])
    {
        Test t = new Test();
        t.doTask();
        System.out.println("done");
    }
}

Мне нужно подождать, пока t.doTask () не будет завершено, прежде чем выводить «готово», но я м не уверен, как именно. Я знаю, что мне, вероятно, следует использовать здесь join () , но мне нужен поток для его вызова, и я не знаю, как получить поток doInBackground () откуда Мне нужно вызвать join () . Спасибо за любую помощь.


РЕДАКТИРОВАТЬ: Спасибо за ответы. К сожалению, get () и подобные им не совсем решают проблему. В моем реальном коде SwingWorker также имеет переопределенную функцию process () , которая обновляет окно графического интерфейса пользователя во время работы фонового потока. get () не останавливает "готово" от печати до doInBackground , но тогда графический интерфейс не обновляется. Я обновил свой пример кода, чтобы отразить это, хотя теперь, конечно, он не компилируется.

Есть ли способ завершить печать только после завершения doInBackground ? Находятся ли код обновления графического интерфейса и оператор «готово» в одном потоке? Нужно ли мне создавать новую ветку?

13
задан Max 23 November 2010 в 23:13
поделиться