[英]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()
方法中发生的事情。 该代码是否创建了一个匿名类? 我遇到过这个词,但还没有完全理解它。 我认为它不会以我上面列出的“教科书”方式创建实例,因为没有变量(无论如何我都可以看到)来引用该实例。
顺便说一句,在我看来,在 JFrame 类(或任何 GUI 类,就此而言)中拥有您的main
方法并不理想,所以我可能会移动它。
new TestClass().setVisible(true)
只是创建一个新实例,在其上调用setVisible(true)
,然后通过不保存对它的引用来“忘记”该实例。 它实际上相当于
TestClass tclass = new TestClass();
tclass.setVisible(true);
因为变量tClass
在 run 方法之外是不可访问的,并且 run 方法除了调用setVisible
什么都不做。
如果必须调用实例上的两个或多个 (void) 方法,您将需要使用一个变量来保存对实例的引用,并且您无法执行让您感到困惑的“一行”技巧:
TestClass tclass = new TestClass();
tclass.setVisible(true);
tclass.methodX();
它不是一个匿名类(请参阅https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html ),它类似于“匿名实例”,尽管我认为该术语不存在。
根据您的项目布局,将main
方法移动到单独的类可能是有意义的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.