jar文件中未包含内部类



我用六个类制作了一个可运行的jar文件:

Main:包含主方法,并在清单中指定(我包含了一行新行)

Main$1和Main$2:2:在主类中的2个匿名内部类。(主方法是2美元,但我认为这并不重要。)

表单

Form$1:Form 中的匿名内部类

包装布局

我在制作jar文件时指定了这些内部类,但当我查看它的内部时(我在mac上),内部类不在jar中!所以当我运行它时,我会得到这个:

 Exception in thread "main" java.lang.NoClassDefFoundError: Main$2
    at Main.main(Main.java:64)
 Caused by: java.lang.ClassNotFoundException: Main$2
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    ... 1 more

我搞不清楚出了什么问题。有人能帮忙吗?

编辑:我想通了!事实证明,在美元符号前面需要一个转义符(\),命令才能识别它们。

您已经找到了具体的答案,但这里有一个更一般的答案。

当您修改程序时,具有自动生成名称的类集(例如Main$2)将发生更改。此外,如果将类移动到命名包中,则jar文件必须具有并行目录结构。您不希望每次发生这种情况时都必须更新您的makefile或构建脚本。相反,您应该使用javac-d为编译后的类文件指定一个目标目录,然后将整个层次结构进行jar。

在创建或更新jar时,可以将内部类名/匿名类名用单引号括起来,以避免shell在其名称中解释$

最新更新