这段代码是在EDT上运行的吗?

时间:2010-08-28 19:09:14

标签: java swing

给出以下代码:

public class MainFrame extends JFrame{

  public MainFrame() throws HeadlessException {
    super();
    this.setSize(500, 400);
    this.setVisible(true);
    this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);

    JButton myButton = new JButton("Test");

    this.add(myButton);

    this.pack();

  }

  public static void main(String[] args) {     
    new MainFrame();
  }

}

构造函数中的代码是否在EDT上运行。我认为这样做是因为它在JFrame的一个实例内“执行”,但我需要第二个意见。

继续这个想法,如果我要创建其他控件,例如在main()函数中,该代码将不在EDT上?

谢谢!

1 个答案:

答案 0 :(得分:1)

没有。您正在从主线程上运行的main方法调用构造函数。

添加通常的样板:

public static void main(String[] args) {     
    java.awt.EventQueue.invokeLater(new Runnable() { public void run() {
        new MainFrame();
    }});
}

扩展您不需要的类(包括JFrameJPanelThread)通常也是一个坏主意。无需声明HeadlessException,因为它未经检查。