调用JOptionPane.showMessageDialog
时遇到问题,为什么在Event-Dispatch-Thread上没有进行此调用。修复是在EDT上执行它,这样:
if(!SwingUtilities.isEventDispatchThread()){
try{
SwingUtilities.invokeAndWait(new Runnable(){
public void run(){
JOptionPane.showMessageDialog(...);
}
});
}catch(...){...}
}else{
JOptionPane.showMessageDialog(...);
}
这里我的问题....为什么这个检查不是由JOptionPane类的每个方法自动完成的?
答案 0 :(得分:0)
我不认为这在每种情况下都是必要的。虽然我们知道swing通常不是线程安全的,但它是线程安全的,而访问本地化为创建swing组件的方法,并且在它显示在屏幕上之前,将它暴露给UI线程