我对Java GUI缺乏经验,所以我使用NetBeans设计器来满足我的大部分需求。这是 NetBeans 生成的main
函数:
public static void main(String args[]) {
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new MyClass().setVisible(true);
}
});
}
如果我将其更改为此,我有任何实质性的区别:
public static void main(String args[]) {
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
MyClass gui = new MyClass();
gui.setVisible(true);
}
});
}
甚至这个:
public static void main(String args[]) {
MyClass gui = new MyClass();
gui.setVisible(true);
}
我问是因为我在创建的一些成员变量中遇到了一些问题,我需要在 main 函数中使用它们,但它不会让我,我也不理解java.awt.EventQueue.invokeLater(new Runnable() { public void run() {
部分。
第一个和第二个选项完全相同,第三个选项风险很大。关于 invokeLater 的要点是将 GUI 对象放入正在等待操作的事件循环中。有关详细信息,请参阅 http://docs.oracle.com/javase/7/docs/api/java/awt/EventQueue.html。
前两个代码片段是严格等效的。第三个根本不是:您应该与 EDT(事件调度线程)中的所有 Swing 图形元素(除了少数例外)进行交互。您的最后一个示例在 EDT 之外创建并显示了一个 JFrame:它可能会出现意外行为。