为什么不在EDT上自动调用JOptionPane?

时间:2015-11-05 08:56:17

标签: java joptionpane event-dispatch-thread

调用JOptionPane.showMessageDialog时遇到问题,为什么在Event-Dispatch-Thread上没有进行此调用。修复是在EDT上执行它,这样:

if(!SwingUtilities.isEventDispatchThread()){
  try{
    SwingUtilities.invokeAndWait(new Runnable(){
      public void run(){
        JOptionPane.showMessageDialog(...);
      }
    });
  }catch(...){...}
}else{
  JOptionPane.showMessageDialog(...);
}

这里我的问题....为什么这个检查不是由JOptionPane类的每个方法自动完成的?

1 个答案:

答案 0 :(得分:0)

我不认为这在每种情况下都是必要的。虽然我们知道swing通常不是线程安全的,但它是线程安全的,而访问本地化为创建swing组件的方法,并且在它显示在屏幕上之前,将它暴露给UI线程