Swing需要在Event Dispatch Thread(EDT)中运行。如何在Spring上下文中确保这一点?
在一些教程like this one中,swing组件只是像普通bean一样实例化。这可以吗?
答案 0 :(得分:1)
正如您已经猜到的那样,在事件调度线程又名 EDT 中运行 Swing 代码会更安全,因为大多数Swing组件不是线程安全的。以下是Oracle文档中的内容:
Swing事件处理代码在称为事件的特殊线程上运行 派遣线程。大多数调用Swing方法的代码也会运行 这个帖子。这是必要的,因为大多数Swing对象方法都是 不是"线程安全":从多个线程调用它们冒险线程 干扰或内存一致性错误。
因此,如果您在EDT线程中初始化 Spring ApplicationContext
,那么您应该安全地离开,以便您的组件初始化并在同一个线程中运行:
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
new ClassPathXmlApplicationContext( "your-application-context.xml" ); // pay attention to context so that it is not left open
}
});