Javadoc的done()
方法SwingWorker:
doInBackground方法完成后,在事件调度线程上执行。
我已经暗示,对于被取消的工人,情况并非如此。
Done
在每种情况下都会被调用(正常终止或取消),但是当cancelled
它 未排入 EDT时(通常终止会发生这种情况)。
done
在SwingWorker
取消a的情况下,何时调用有更精确的分析吗?
澄清:这个问题是 不是 就如何cancel
一个SwingWorker
。在此假定SwingWorker
以正确的方式取消。
它是 不是 什么时候他们应该完成的线程仍在工作。
通过取消线程时
myWorkerThread.cancel(true/false);
done方法(非常令人惊讶)由cancel方法本身调用。
您可能会期望发生的事情,但实际上并不会:
-调用cancel(无论是否使用mayInterrupt)
-取消设置线程取消
-doInBackground退出
-完成被称为
(完成被 排队 到EDT中,这意味着,如果EDT忙,则在EDT完成其操作后发生)
实际发生的情况:
-调用cancel(无论是否与mayInterrupt一起使用)
-取消设置线程取消
-将done作为取消代码的一部分 *
-doInBackground将在其循环完成后退出
(完成没有加入到EDT中,而是调用了cancel调用,因此它对EDT具有非常直接的影响,通常是GUI)
我提供了一个简单的例子来证明这一点。
复制,粘贴并运行。
1.我在完成时生成一个运行时异常。堆栈线程显示完成由取消调用。
2.大约在取消后4秒钟后,您将从doInBackground收到问候语,该问候语证明在线程退出之前完成了调用。
import java.awt.EventQueue;
import javax.swing.SwingWorker;
public class SwingWorker05 {
public static void main(String [] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
W w = new W();
w.execute();
Thread.sleep(1000);
try{w.cancel(false);}catch (RuntimeException rte) {
rte.printStackTrace();
}
Thread.sleep(6000);
} catch (InterruptedException ignored_in_testing) {}
}
});
}
public static class W extends SwingWorker <Void, Void> {
@Override
protected Void doInBackground() throws Exception {
while (!isCancelled()) {
Thread.sleep(5000);
}
System.out.println("I'm still alive");
return null;
}
@Override
protected void done() {throw new RuntimeException("I want to produce a stack trace!");}
}
}
问题内容: 我是一名即将毕业的计算机科学专业的学生,在我的整个编码生涯中,我发现很少使用枚举的实例,除了典型的情况(例如代表标准纸牌的面孔)外,还使用了枚举。 您是否知道在日常编码中使用枚举的任何巧妙方法? 为什么枚举如此重要,在什么情况下应该能够确定建立枚举是最佳方法? 问题答案: 这些是主要的论点,以及短的例子。 的情况 从Java 6开始,是一个凌乱类的示例,该类可以从使用中受益匪浅(除
问题内容: 我正在尝试通过对象读取命令。为了检查输入语法,我使用了(对于缺少命令的情况)。在许多情况下,它确实可以正常工作,但是现在我有了JavaAPI中描述为“ MAY块并等待输入”的情况。 该方法什么时候阻止,我该如何控制?有趣的是,在块之前有3个案例,它工作得很好。另外,JavaAPI还描述了检查是否存在另一个Input的正确方法,以使该Method 不会产生。 这是我到目前为止所产生的代码
我正在尝试通过对象读取命令。为了检查输入语法,我使用<code>sc。hasNext()(对于缺少命令的情况)。它已经在很多情况下运行良好,但现在我看到了JavaAPI中描述的“MAY block and wait for Input”的情况。 方法何时阻塞,我如何控制它?有趣的是,在街区前的3个案例中,它工作得非常好。此外,JavaAPI还将描述为检查是否存在另一个Input的正确方法,从而使方
我正在尝试做一个程序,可以添加客户的姓名,年龄,联系电话和电子邮件。我想搜索用户想要的名字,但即使我输入了完全相同的名字,它也不会搜索这个名字。我怎样才能解决这个问题? 这是我的代码:
问题内容: 我遇到这种情况,我需要将a解析为an ,但我不知道该如何处理。当我没有抓住它时,编译器不会抱怨,但是我只是想确保自己能够正确处理这种情况。 我只想这样简化我的代码。编译器没有问题,但是线程在上死掉了。 Google CodePro希望我以某种方式记录该异常,并且我同意这是最佳实践。 我希望当当前片段不是数字或无法解析时返回此方法。当我没有显式捕获时,是否不分配变量?还是有一些默认值返回
本文向大家介绍什么时候用delegate,什么时候用Notification?相关面试题,主要包含被问及什么时候用delegate,什么时候用Notification?时的应答技巧和注意事项,需要的朋友参考一下 答:delegate针对one-to-one关系,并且reciever可以返回值 给sender,notification 可以针对one-to-one/many/none,recieve