1

我正在使用 Eclipse + Window Builder + 一些第三方库来构建一个 gui 应用程序,

我的应用程序的入口点位于 MainWindow.java 文件中,该文件还包含应用程序的 gui,除了我几乎没有帮助程序类。

我的应用程序运行良好,但是当我检查 bin 文件夹时,我发现还有四个类文件,即:1. MainWindow$1.class 2. MainWindow$2.class 3. MainWindow$3.class 4. MainWindow$4.class。

现在我不明白为什么这些文件在这里,当我删除这些文件时,Eclipse 抛出异常

Exception in thread "main" java.lang.NoClassDefFoundError: gui/MainWindow$1
at gui.MainWindow.main(MainWindow.java:71)
    Caused by: java.lang.ClassNotFoundException: gui.MainWindow$1
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)

引发异常的代码是:

public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                MainWindow window = new MainWindow();
                window.frmMailExtractor.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });

我无法找出这些文件为何存在以及是谁放置的?有任何想法吗?

好的,所以这些是匿名类,但是为什么会出现异常呢?...为什么我在 eclipse 中看不到它们。因为当我将其导出为可运行的 jar 时,jar 会引发相同的异常

4

2 回答 2

3

这些是为内部匿名内部类生成的类文件MainWindow。它可能包含一堆这样实现的事件侦听器。

匿名内部类被编译成名为 的单独类文件<OuterClass>$<nnn>.class,其中<nnn>是编译器生成的编号。

于 2012-09-14T10:10:25.067 回答
1

这些是匿名类被编译成的。文件名中的数字是相应 Java 编译单元中相关匿名类的序号。

于 2012-09-14T10:11:18.697 回答