gpt4 book ai didi

命令行中的 java.lang.NoClassDefFoundError

转载 作者:行者123 更新时间:2023-11-29 06:17:04 26 4
gpt4 key购买 nike

我正在 Eclipse 中开发一个应用程序,它在 Eclipse 中运行良好。我遇到的问题是,当我将它导出到 jar 文件并从命令行运行它时,我收到了 javax.mail.internet 的 NoClassDefFound 错误。

在我的项目构建路径和类路径中,我都包含了使用 javax.mail.internet 所需的 activation.jar 和 mail.jar 库,就像我说的那样,它在 Eclipse 中运行良好,但在导出时却不行它到一个 jar 里。如果我的构建路径有这些文件,我的类路径也有,为什么这不起作用?

这是错误堆栈:线程“AWT-EventQueue-0”中的异常 java.lang.NoClassDefFoundError: javax/mai
l/互联网/互联网地址
在 javax.swing.AbstractButton.fireActionPerformed(未知来源)
在 javax.swing.AbstractButton$Handler.actionPerformed(未知来源)
在 javax.swing.DefaultButtonModel.fireActionPerformed(未知来源)
在 javax.swing.DefaultButtonModel.setPressed(未知来源)
在 javax.swing.plaf.basic.BasicButtonListener.mouseReleased(未知酸
ce)
在 java.awt.Component.processMouseEvent(未知来源)
在 javax.swing.JComponent.processMouseEvent(未知来源)
在 java.awt.Component.processEvent(未知来源)
在 java.awt.Container.processEvent(未知来源)
在 java.awt.Component.dispatchEventImpl(未知来源)
在 java.awt.Container.dispatchEventImpl(未知来源)
在 java.awt.Component.dispatchEvent(未知来源)
在 java.awt.LightweightDispatcher.retargetMouseEvent(未知来源)
在 java.awt.LightweightDispatcher.processMouseEvent(未知来源)
在 java.awt.LightweightDispatcher.dispatchEvent(未知来源)
在 java.awt.Container.dispatchEventImpl(未知来源)
在 java.awt.Window.dispatchEventImpl(未知来源)
在 java.awt.Component.dispatchEvent(未知来源)
在 java.awt.EventQueue.dispatchEvent(未知来源)
在 java.awt.EventDispatchThread.pumpOneEventForFilters(未知来源)
在 java.awt.EventDispatchThread.pumpEventsForFilter(未知来源)
在 java.awt.EventDispatchThread.pumpEventsForHierarchy(未知来源)
在 java.awt.EventDispatchThread.pumpEvents(未知来源)
在 java.awt.EventDispatchThread.pumpEvents(未知来源)
在 java.awt.EventDispatchThread.run(未知来源)
引起:java.lang.ClassNotFoundException:javax.mail.internet.InternetAddress
在 java.net.URLClassLoader$1.run(未知来源)
在 java.security.AccessController.doPrivileged( native 方法)
在 java.net.URLClassLoader.findClass(未知来源)
在 java.lang.ClassLoader.loadClass(未知来源)
在 sun.misc.Launcher$AppClassLoader.loadClass(未知来源)
在 java.lang.ClassLoader.loadClass(未知来源)
... 还有 27 个

最佳答案

这几乎可以肯定是类路径问题。尝试打开您导出的 JAR(通过 winzip,或重命名为 .zip 并使用 windows)并检查 jarred 文件夹结构以确定“javax/mail/internet/”存在并且其中包含 InternetAddress.class 文件。或者打开位于 JAR 中的 MANIFEST.MF 以确定它包含类路径条目并且 list 中指定的 jar 存在于 list 指定的位置。

编辑:通过从 JVM 中的系统属性打印它来检查您的运行时类路径。

System.out.println(System.getProperty("java.class.path"));

我想你会发现它不见了,很抱歉让你经历了额外的人工检查工作,但它有时会揭示问题。

通常 jar 文件不包含在 jar 中。导出可执行 jar 有两种常见的方法:

  1. 将您的类文件打包并包含一个 list ,该 list 指定 JVM 可以在其中找到与您自己的库相关的其他库的类路径。
  2. 将您的类文件与其他 jar 的内容一起打包到一个 jar 中。这很可能是您想要的,并且可以通过使用 eclipse 的“导出...> 可运行 JAR 文件”向导来完成。请务必使用“可运行 JAR 文件”并选择正确的运行配置。

您可能会发现这个 SO 问题相关: Classpath including JAR within a JAR

关于命令行中的 java.lang.NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4686695/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com