管理 EDT 上需要执行的规则(我看到“EDT”比“事件队列”更常用)在 Java 的生命周期中发生了变化。每次“规则”发生变化时,Sun 都建议在 EDT 上做越来越多的“GUI 相关”工作。
为什么人们在 EDT 上运行 Java GUI?
请注意,这并不是众所周知的,EDT 实际上偶尔会崩溃,因为 Swing 本身有一些错误。每个重要的 Swing 应用程序都在使用 Swing API,这些 API 存在错误,因此 EDT 有时会死掉。
您永远不会看到它,也不必担心,因为当 EDT 死亡时,它会自动重新启动。
基本上,在 EDT 上执行所有与 GUI 相关的操作,并在 EDT 之外执行所有冗长的操作(以免阻塞 EDT)。
编辑您询问了如何在 EDT 之外运行冗长操作的示例。有几种方法可以做到这一点。在最简单的情况下,您只需从 EDT 创建并启动一个新线程。这是一个例子:当用户点击一个按钮时,监听器回调将被调用,我们知道这将在 EDT 上发生......
JButton jb = ...
jb.addActionListener( new ActionListener() {
public void actionPerformed( final ActionEvent e ) {
final Thread t = new Thread( new Runnable() {
public void run() {
// this shall get executed, after start() has been called, outside the EDT
}
});
t.start();
}
} );
对于更复杂的示例,您想阅读SwingWorker等。