Say I have the following code:
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");
}
}
I need to wait until t.doTask()
is done before printing out 'done', but I'm not sure exactly how. I know I should probably use join()
here, but I need a thread to call it on, and I don't know how to get doInBackground()
's thread from where I need to call join()
. Thanks for any help.
EDIT: Thanks for the responses. Unfortunately, get()
and the like don't quite solve the problem. In my actual code, the SwingWorker also has an overridden process()
function that updates a GUI window while the background thread is running. get()
does stop 'done' from being printed till after doInBackground
, but then the GUI doesn't update. I updated my sample code to reflect this, although now of course it won't compile.
Is there a way to get 'done' to print only once doInBackground
is finished? Are the GUI update code and the 'done' statement on the same thread? Do I need to make a new thread?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…