如何结合Swing和SpringFramework?

时间:2015-03-04 10:16:51

标签: java spring swing event-dispatch-thread

Swing需要在Event Dispatch Thread(EDT)中运行。如何在Spring上下文中确保这一点?

在一些教程like this one中,swing组件只是像普通bean一样实例化。这可以吗?

1 个答案:

答案 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
  }
});