java - invokeLater 和 NetBeans 中的主类

标签 java swing netbeans program-entry-point invokelater

在使用 NetBeans 制作新的 JFrame 项目时,我一直在研究自动生成的代码,并在我的 main 方法中遇到了这个问题:

java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            new TestClass().setVisible(true);
        }
    });

经过一些阅读,我开始理解 invokeLater 的必要性,因此 GUI 组件在 EDT 中处理。也就是说,new TestClass().setVisible(true); 行,因为它在这里实现,对我来说有点令人难以置信。我在创建新实例的上下文中得到它...

TestClass tclass = new TestClass();
tclass.setVisible(true);

...但我不太了解上面的 run() 方法中发生的事情。该代码是否创建了一个匿名类?我遇到过这个术语,但还没有完全理解它。我假设它没有以我上面列出的“教科书”方式创建实例,因为没有变量(无论如何我都能看到)来引用该实例。

顺便说一句,在我看来,将您的 main 方法放在 JFrame 类(或任何 GUI 类,就此而言)中并不理想,所以我可能会移动它。

最佳答案

new TestClass().setVisible(true) 只是创建一个新实例,对其调用 setVisible(true) 然后通过不保存来“忘记”该实例对它的引用。它实际上等同于

TestClass tclass = new TestClass();
tclass.setVisible(true);

因为变量 tClass 在 run 方法之外是不可访问的,并且 run 方法除了在其上调用 setVisible 什么都不做。

如果必须调用实例上的两个或多个(void)方法,您将需要使用一个变量来保存对该实例的引用,而您不能执行“一个” -line”让你不解的技巧:

TestClass tclass = new TestClass();
tclass.setVisible(true);
tclass.methodX();

它不是匿名类(参见 https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html),它类似于“匿名实例”,尽管我认为该术语不存在。

根据您的项目布局,将 main 方法移动到一个单独的类中可能是有意义的。

关于java - invokeLater 和 NetBeans 中的主类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31769436/

相关文章:

java - pdfBox - contentStream.concatenate2CTM 完整文档参数

java - 使用 cf-java-client 执行 "cf-push"

java - 设置ContentPane不起作用

java - 将绝对布局合并为标准布局

java - 使用 Netbeans 检查 jDownloader

java - java中final的使用

java - 实现 onSaveInstanceState 并自定义它以在旋转屏幕后保存文本后应用程序崩溃

java - 如何使用 Java 中的 JButton 操作调整 JWindow 的宽度和高度?

java - 简单的 3d 代码会抛出异常!

java - 将属性文件转换为 Excel