Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.gui > #1364
| From | "Knute Johnson" <knute.johnson@THRWHITE.remove-dii-this> |
|---|---|
| Subject | Re: calling SwingWorker c |
| Message-ID | <_2SPh.286892$Ju2.128092@newsfe16.lga> (permalink) |
| Newsgroups | comp.lang.java.gui |
| References | <1175434540.675174.116000@n59g2000hsh.googlegroups.com> |
| Date | 2011-04-27 15:32 +0000 |
| Organization | TDS.net |
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
Back to comp.lang.java.gui | Previous | Next — Previous in thread | Find similar | Unroll thread
calling SwingWorker cance "yancheng.cheok" <yancheng.cheok@THRWHITE.remove-dii-this> - 2011-04-27 15:32 +0000
Re: calling SwingWorker c "Knute Johnson" <knute.johnson@THRWHITE.remove-dii-this> - 2011-04-27 15:32 +0000
Re: calling SwingWorker c "yancheng.cheok" <yancheng.cheok@THRWHITE.remove-dii-this> - 2011-04-27 15:32 +0000
Re: calling SwingWorker c "Knute Johnson" <knute.johnson@THRWHITE.remove-dii-this> - 2011-04-27 15:32 +0000
csiph-web