invokeLater 和 NetBeans 中的主要 class
invokeLater and the main class in NetBeans
我在使用 NetBeans 制作新的 JFrame 项目时一直在研究自动生成的代码,并在我的 main
方法中遇到了这个问题:
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new TestClass().setVisible(true);
}
});
经过一些阅读,我开始理解 invokeLater 的必要性,以便在 EDT 中处理 GUI 组件。也就是说,new TestClass().setVisible(true);
行在此处的实现让我有些困惑。我在创建新实例的上下文中得到它...
TestClass tclass = new TestClass();
tclass.setVisible(true);
...但我不太理解上面 run()
方法中发生的事情。该代码是否创建了一个匿名 class?我已经 运行 了解该术语,但还没有完全理解它。我假设它没有以我上面列出的 "textbook" 方式创建实例,因为没有变量(无论如何我都能看到)来引用该实例。
顺便说一句,在我看来,将您的 main
方法放在 JFrame class(或任何 GUI class 中)无论如何都不理想,所以我可能会移动它。
new TestClass().setVisible(true)
只是创建一个新实例,在其上调用 setVisible(true)
然后 "forgetting" 通过不保存对它的引用来调用该实例。其实相当于
TestClass tclass = new TestClass();
tclass.setVisible(true);
因为变量 tClass
在 运行 方法之外是不可访问的,而 运行 方法除了调用 setVisible
之外什么都不做。
如果必须调用实例上的两个或多个 (void) 方法,您将需要使用变量来保存对该实例的引用,而您不能'不要做让你感到困惑的 "one-line" 把戏:
TestClass tclass = new TestClass();
tclass.setVisible(true);
tclass.methodX();
它不是匿名的 class(参见 https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html),它有点像 'anonymous instance',虽然我认为这个词不存在。
根据您的项目布局,将 main
方法移动到单独的 class.
可能是有意义的
我在使用 NetBeans 制作新的 JFrame 项目时一直在研究自动生成的代码,并在我的 main
方法中遇到了这个问题:
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new TestClass().setVisible(true);
}
});
经过一些阅读,我开始理解 invokeLater 的必要性,以便在 EDT 中处理 GUI 组件。也就是说,new TestClass().setVisible(true);
行在此处的实现让我有些困惑。我在创建新实例的上下文中得到它...
TestClass tclass = new TestClass();
tclass.setVisible(true);
...但我不太理解上面 run()
方法中发生的事情。该代码是否创建了一个匿名 class?我已经 运行 了解该术语,但还没有完全理解它。我假设它没有以我上面列出的 "textbook" 方式创建实例,因为没有变量(无论如何我都能看到)来引用该实例。
顺便说一句,在我看来,将您的 main
方法放在 JFrame class(或任何 GUI class 中)无论如何都不理想,所以我可能会移动它。
new TestClass().setVisible(true)
只是创建一个新实例,在其上调用 setVisible(true)
然后 "forgetting" 通过不保存对它的引用来调用该实例。其实相当于
TestClass tclass = new TestClass();
tclass.setVisible(true);
因为变量 tClass
在 运行 方法之外是不可访问的,而 运行 方法除了调用 setVisible
之外什么都不做。
如果必须调用实例上的两个或多个 (void) 方法,您将需要使用变量来保存对该实例的引用,而您不能'不要做让你感到困惑的 "one-line" 把戏:
TestClass tclass = new TestClass();
tclass.setVisible(true);
tclass.methodX();
它不是匿名的 class(参见 https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html),它有点像 'anonymous instance',虽然我认为这个词不存在。
根据您的项目布局,将 main
方法移动到单独的 class.