Sometimes the user will change their mind; they may have selected the wrong option, or something more important may have come up. The progress monitor allows for two-way communication; the user can signify when they want to cancel as well. There is a method, isCancelled()
, which returns true
if the user has signified in some way that he/she wishes the Job
to finish early. Periodically checking this during the operation of the Job
allows the user to cancel a long-running Job
before it reaches the end.
for
loop in the HelloHandler
to check on each iteration whether the monitor is cancelled or not.for(int i=0;i<50 && !monitor.isCanceled(); i++) { ... } if(!monitor.isCancelled()) { Display.getDefault().asyncExec(new Runnable() {…}); }
Being responsive to the user is a key point in implementing plug-ins. If there are long running operations, make sure to check to see if the user has cancelled the operation—there's no point in tying up the CPU if the user doesn't want it to continue.
The monitor.isCancelled()
method is generally implemented with a single field access, so calling it frequently often has no negative performance implications. Calling the isCancelled()
method too many times is never noticed by users, however, not calling it enough certainly is noticed.