当我启动我的 Swing 对话框布局时,是否在类的 run 方法中执行它会有所不同:
公共无效运行() { 框架 = 新的 JFrame(); ... 框架.setVisible(真); }
还是类构造函数?
公共我的班级 { 框架 = 新的 JFrame(); ... 框架.setVisible(真); } 公共无效运行() { }
谢谢
当我启动我的 Swing 对话框布局时,是否在类的 run 方法中执行它会有所不同:
公共无效运行() { 框架 = 新的 JFrame(); ... 框架.setVisible(真); }
还是类构造函数?
公共我的班级 { 框架 = 新的 JFrame(); ... 框架.setVisible(真); } 公共无效运行() { }
谢谢
是的,这很重要,原因是您应该在 Swing 事件线程(事件调度线程或 EDT)上调用大多数 Swing 代码,包括创建 JFrame。为此,您通常在 Runnable 中创建 Swing GUI,并通过调用以下内容在事件线程上排队 Runnable:
SwingUtilities.invokeLater(new Runnable(){
public void run() {
// create your Swing GUI here
frame = new JFrame();
...
frame.setVisible( true );
}
});
例外是在 API 中记录为线程安全的 Swing 方法调用,例如repaint()
组件的方法。
这是上下文相关的。正如@hovercraftfullofeels 指出的那样,您需要确保您的所有 UI 代码都在 中执行EDT
,包括初始化。
EDT
如果您已经InvokeLater
在EDT
.
最好检查一下EventQueue.isDispatchingThread