当我启动我的Swing对话框布局时,是否在类的run方法中执行它会有所不同:
public void run()
{
frame = new JFrame();
...
frame.setVisible( true );
}
还是类构造函数?
public MyClass
{
frame = new JFrame();
...
frame.setVisible( true );
}
public void run()
{
}
谢谢
2 回答
是的,这很重要,原因是你应该在Swing事件线程(Event Dispatch Thread或EDT)上调用大多数Swing代码,包括创建JFrame . 为此,您通常在Runnable中创建Swing GUI,并通过调用以下内容将事件线程上的Runnable排队:
例外情况是API中记录的Swing方法调用是线程安全的,例如组件的
repaint()
方法 .这是背景 . 正如@hovercraftfullofeels指出的那样,您需要确保所有的UI代码都在_779428中执行,包括初始化 .
如果你已经在
EDT
中运行,那么就不需要使用InvokeLater
(除非你真的想要),否则你必须将回调重新同步回EDT
.最好用
EventQueue.isDispatchingThread
查看