给出以下代码:
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上?
谢谢!
答案 0 :(得分:1)
没有。您正在从主线程上运行的main
方法调用构造函数。
添加通常的样板:
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() { public void run() {
new MainFrame();
}});
}
扩展您不需要的类(包括JFrame
,JPanel
和Thread
)通常也是一个坏主意。无需声明HeadlessException
,因为它未经检查。