问题描述
我有这个问题。当我在 Intellij 中运行我的代码时它工作正常,但如果我做一个工件并构建 jar,它就不起作用。我认为它是由外部库引起的。这是我的输出:
Exception in thread "main" java.lang.NoClassDefFoundError: com/mindfusion/scheduling/Calendar
at GUI.<init>(GUI.java:75)
at Logfiles.main(Logfiles.java:13)
Caused by: java.lang.classNotFoundException: com.mindfusion.scheduling.Calendar
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:606)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:168)
at java.base/java.lang.classLoader.loadClass(ClassLoader.java:522)
... 2 more
我知道它是哪个类,但我不知道如何解决问题。我真的只是一个初学者。你能帮我解释一下吗?谢谢
编辑:
在我使用提取的库构建工件后,此错误出现:错误:发生 JNI 错误,请检查您的安装并重试 线程“main”中的异常 java.lang.SecurityException:Manifest 主要属性的签名文件摘要无效
解决方法
理解这个问题的最简单方法是阅读该类的 Javadoc。来自 Javadoc:
如果 Java 虚拟机或 ClassLoader 实例试图 在类的定义中加载(作为正常方法调用的一部分或 作为使用 new 表达式创建新实例的一部分)并且没有 可以找到类的定义。
搜索到的类定义在编译当前正在执行的类时存在, 但是已经找不到定义了。
这意味着当特定的类在编译时存在但在运行时以某种方式不可用时,可以抛出 NoClassDefFoundError
。这可能是由于缺少 JAR 文件、权限问题、或运行时类路径不正确。
通常,当开发人员忽略为使用的库定义类路径时,我会看到这些问题。他们忘记了您的 IDE 有自己的定义类路径的文件(即 Eclipse 具有 .classpath 文件),因此从 IDE 运行应用程序可以正常工作(类在编译时存在),但是在应用程序之后被编译并且类路径未在托管应用程序的机器中定义,NoClassDefFoundError
被抛出(运行时类“丢失”)。
如果类路径正确,我的建议首先被弄清楚。很多时候,这就是问题所在。如果类路径正确,请确保正确设置所有权限。