Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Swing对话框布局:运行方法还是构造函数?_Java_Multithreading_Swing - Fatal编程技术网

Java Swing对话框布局:运行方法还是构造函数?

Java Swing对话框布局:运行方法还是构造函数?,java,multithreading,swing,Java,Multithreading,Swing,当我启动Swing对话框布局时,是否在类的run方法中执行该布局是否会产生差异: public void run() { frame = new JFrame(); ... frame.setVisible( true ); } 公开募捐 { frame=新的JFrame(); ... frame.setVisible(true); } 还是类构造函数 public MyClass { frame = new

当我启动Swing对话框布局时,是否在类的run方法中执行该布局是否会产生差异:

public void run() { frame = new JFrame(); ... frame.setVisible( true ); } 公开募捐 { frame=新的JFrame(); ... frame.setVisible(true); } 还是类构造函数

public MyClass { frame = new JFrame(); ... frame.setVisible( true ); } public void run() { } 公共MyClass { frame=新的JFrame(); ... frame.setVisible(true); } 公开募捐 { }
谢谢

是的,这很重要,原因是您应该在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