Java 此代码是否在EDT上运行?
给定以下代码:Java 此代码是否在EDT上运行?,java,swing,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 JButt
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上
谢谢大家! 否。您正在从主线程上运行的
main
方法调用构造函数
添加常用的样板文件:
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() { public void run() {
new MainFrame();
}});
}
另外,扩展不需要的类(包括
JFrame
、JPanel
和Thread
)通常也是个坏主意。无需声明HeadlessException
,因为它是未选中的。否。您正在从主线程上运行的main
方法调用构造函数
添加常用的样板文件:
public static void main(String[] args) {
java.awt.EventQueue.invokeLater(new Runnable() { public void run() {
new MainFrame();
}});
}
另外,扩展不需要的类(包括
JFrame
、JPanel
和Thread
)通常也是个坏主意。无需声明HeadlessException
,因为它是未选中的。因此,如果我在main()中调用SwingUtilities.invokeLater来实例化帧,可以吗?我在您编辑的示例中看到您使用了EventQueue。这是针对SwingUtilities的建议吗?@BogdanSwingUtilities.invokeLater
只调用EventQueue.invokeLater
,如前所述Ok。知道了。谢谢大家@在Java1.1中,AWT没有EventQueue.invokeLater
,因此Swing扩展(原样)必须使用hack实现invokeLater
。在我看来,从Java 1.2开始,在处理AWT的EventQueue
时,不需要引用SwingUtilities
的垃圾箱。OTOH,javax.swing
中有相当一部分实际上与AWT有关,无论您是否使用swing,因此不管怎么说,它都是一团乱,您选择哪一个可能都不会有很大的区别。因此,如果我在main()中调用SwingUtilities.invokeLater要实例化框架,可以吗?我在您编辑的示例中看到您使用了EventQueue。这是针对SwingUtilities的建议吗?@BogdanSwingUtilities.invokeLater
只调用EventQueue.invokeLater
,如前所述Ok。知道了。谢谢大家@在Java1.1中,AWT没有EventQueue.invokeLater
,因此Swing扩展(原样)必须使用hack实现invokeLater
。在我看来,从Java 1.2开始,在处理AWT的EventQueue
时,不需要引用SwingUtilities
的垃圾箱。OTOH,javax.swing
中有相当一部分实际上与AWT有关,无论您是否使用swing,因此不管怎么说,它都是一团乱,您选择哪一个都不会有很大的区别。