取消后台任务

要取消正在运行的后台任务,请调用SwingWorker.cancel任务必须配合其自己的取消操作。有两种方法可以做到这一点:

cancel方法采用一个boolean参数。如果参数为true,则cancel向后台任务发送中断。无论参数是true还是false,调用cancel都会将对象的取消状态更改为true。这是isCancelled返回的值。更改后,取消状态将无法恢复。

上一节中的Flipper示例使用仅状态习语。 isCancelled返回true时,退出doInBackground中的主循环。当用户单击“取消”按钮,触发使用false参数调用cancel的代码时,就会发生这种情况。

仅状态方法对Flipper有意义,因为Flipper的实现不包含任何可能抛出InterruptedException的代码。为了响应中断,后台任务将不得不在短间隔内调用Thread.isInterrupted。将SwingWorker.isCancelled用于相同的 Object 同样容易

Note:

如果取消了SwingWorker对象的后台任务后对其调用get,则抛出java.util.concurrent.CancellationException