Допустим, у меня есть следующий код:
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
? Находятся ли код обновления графического интерфейса и оператор «готово» в одном потоке? Нужно ли мне создавать новую ветку?