如何结合Swing和SpringFramework?

Suz*_*ioc 5 java swing spring event-dispatch-thread

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

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

tma*_*wen 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
  }
});
Run Code Online (Sandbox Code Playgroud)