取自javax.swing包描述:
Swing的线程策略
通常,Swing不是线程安全的。除非另有说明,否则所有Swing组件和相关类都必须在事件分发线程上进行访问。典型的Swing应用程序会根据用户手势生成的事件进行处理。例如,单击JButton会通知添加到JButton的所有ActionListener。由于从用户手势生成的所有事件都分配在事件分配线程上,因此大多数开发人员不受此限制的影响。
但是,影响所在在于构建和显示Swing应用程序。在事件分配线程上不会调用对应用程序的主方法或Applet中的方法的调用。因此,在构造和显示应用程序或小程序时,必须小心将控制转移到事件分发线程。转移控制权并开始使用Swing的首选方法是使用invokeLater。invokeLater方法计划在事件分配线程上处理一个Runnable。
JOptionPane并未证明它是线程安全的,因此必须使用
invokeLater()。



