我了解了 swing 不是线程安全的。深入研究后,我发现对 Swing 组件的每次修改都必须在 Event Dispatch Thread 上完成,以防止与多线程相关的各种问题。然而,信息似乎完全停在那里。似乎没有一个很好的教程来解释如何在互联网上任何可访问的地方执行此操作。
将发布的与其他问题相关的代码中的信息拼凑在一起,似乎我必须在我的程序中的每一个摆动修改周围放置一个不整洁的代码块(就像我自己的代码中的这个示例):
try {
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
setTitle("Frame title");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
setSize(800, 480);
setLocationRelativeTo(null);
setIconImage(Toolkit.getDefaultToolkit().createImage(ClassLoader.getSystemResource("Frame icon.png")));
}
});
} catch (Exception e) {
e.printStackTrace();
}
基本上,这是对的吗?我是否必须在代码中对 Swing 组件的每次修改都放置该代码(或与 invokeLater 等效的代码)?
另外,为什么 Swing 不自动执行此操作?