Re: calling SwingWorker c
To: comp.lang.java.gui
yancheng.cheok@gmail.com wrote:
is there anyway, i can wait for the swing worker to really complete,
after i call the cancel method? this is my swing worker will only
terminate, only if i call cancel()...
while (! isCancelled()) {
// swing worker is doing something....
}
No.
You will know that marketTask is canceled by checking the return value
of cancel(). Calling get() will not block. It will just throw a
CancellationException.
Is there any way I can "wait", until the task is really completed
after I make a call to cancel? My task is running in a infinity loop :
If your task is an infinite loop then you don't need SwingWorker. Just
use a Runnable and start it running with a thread. Then when you are
done, signal it to stop either by interrupting it, setting a flag or
causing some sort of exception to be thrown.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class test5 implements Runnable {
volatile boolean runFlag = true;
Thread thread;
public void run() {
// once started this thread will run as long as runFlag is true
while (runFlag) {
// do your processing here, this example just sleeps
System.out.println("processing...");
try {
Thread.sleep(3000);
} catch (InterruptedException ie) { }
}
System.out.println("process stopped");
}
public static void main(String[] args) {
// create the gui
Runnable r = new Runnable() {
public void run() {
final test5 t5 = new test5();
final JFrame f = new JFrame();
// leave the window open when the X is clicked
f.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
// start another thread here so as not to
// block the EDT
Runnable r = new Runnable() {
public void run() {
// tell the loop to end
t5.runFlag = false;
// join this thread and the task thread
// this will wait here until the other
// thread is finished or this thread is
// interrupted
try {
t5.thread.join();
} catch (InterruptedException ie) { }
// close the program
System.exit(0);
}
};
// start the runnable above to end the program
new Thread(r).start();
// show a dialog to let users know what is
// happening
JDialog d = new JDialog(f,false);
d.setLocationRelativeTo(f);
JLabel l = new JLabel("Shutting Down");
d.add(l);
d.pack();
d.setVisible(true);
}
});
f.setSize(200,150);
f.setVisible(true);
// start the task running
t5.thread = new Thread(t5);
t5.thread.start();
}
};
EventQueue.invokeLater(r);
}
}
--
Knute Johnson
email s/nospam/knute/
---
* Synchronet * The Whitehouse BBS --- whitehouse.hulds.com --- check it out free usenet!
--- Synchronet 3.15a-Win32 NewsLink 1.92
Time Warp of the Future BBS - telnet://time.synchro.net:24