SwingWorker.cancel
The task must cooperate with its own cancellation. There are two ways
it can do this:
SwingWorker.isCanceled
at short intervals. This method returns true if
cancel has been invoked for this
SwingWorker.
The cancel method takes a single boolean
argument. If the argument is true, cancel
sends the background task an interrupt. Whether the argument is
true or false, invoking cancel
changes the cancellation status of the object to true.
This is the value returned by isCanceled. Once changed,
the cancellation status cannot be changed back.
The Flipper example from the previous section uses the
status-only idiom. The main loop in doInBackground exits
when isCancelled returns true. This will
occur when the user clicks the "Cancel" button, triggering code that
invokes cancel with an argument of false.
The status-only approach makes sense for Flipper because
its implementation of SwingWorker.doInBackground does not
include any code that might throw InterruptedException.
To respond to an interrupt, the background task would have to invoke
Thread.isInterrupted at short intervals. It's just as
easy to use SwingWorker.isCancelled for the same purpose
get is invoked on a SwingWorker object
after its background task has been cancelled,
java.util.concurrent.CancellationException
is thrown.