我在调用JOptionPane.showMessageDialog时遇到了一个问题,为什么这个调用没有在Event-Dispatch-Thread上完成。修复方法是在EDT上执行它,如下所示:
if(!SwingUtilities.isEventDispatchThread()){
try{
SwingUtilities.invokeAndWait(new Runnable(){
public void run(){
JOptionPane.showMessageDialog(...);
}
});
}catch(...){...}
}else{
JOptionPane.showMessageDialog(...);
}我的问题是..。为什么JOptionPane类的每个方法都不能自动执行此检查?
发布于 2015-11-05 17:02:25
我不认为这在所有情况下都是必要的。虽然我们知道swing通常不是线程安全的,但当访问被本地化到创建swing组件的方法时,它是线程安全的,并且在它显示在屏幕上之前,它向UI线程公开它
https://stackoverflow.com/questions/33540180
复制相似问题