如果我添加Thread.sleep(…),它确实可以工作,但是会抛出InterruptedException
显然产生异常的代码(从OP的编辑中复制):
while (!isCancelled()) { counter %= arrNames.length; // System.out.format("Counter : %d%n", counter); publish(arrNames[counter]); try { Thread.sleep(30); // throws } catch (InterruptedException ie) { ie.printStackTrace(); } counter++;}但是,原因是取消工作程序的代码(在actionListener中):
backgroundTask.cancel(true);
它明确告诉工作人员通过..中断线程来取消。从其api文档中:
mayInterruptIfRunning-如果应该中断执行此任务的线程,则为true;否则为false。否则,正在进行的任务将被允许完成
顺便说一句:捕获异常而不执行任何操作(从而有效地忽略中断)并不是最好的主意。在这种情况下,由于检查已取消状态,可能不会造成太大破坏。典型的工作程序实现要么在需要进行一些内部清理之后捕获并返回,要么根本不处理它。



