Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.gui > #1364

Re: calling SwingWorker c

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

Show all headers | View raw


  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 | NextPrevious in thread | Find similar | Unroll thread


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