【问题标题】:Why do I get "A Java Exception has occurred" after I export my application to Jar?将应用程序导出到 Jar 后,为什么会出现“发生 Java 异常”?
【发布时间】:2012-10-16 05:19:43
【问题描述】:

好吧,我用 Eclipse 将我的应用程序导出到 JAR 中,但现在每当我尝试运行它时,我都会得到:“发生 Java 异常”。当我尝试通过命令行运行它时,它说:

C:\Users\Arturas>java -jar D:\Dropbox\EclipseWorkspace\Exports\Dantracio_skaiciu
oklis3.jar
Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/swt/widge
ts/Composite
        at java.lang.Class.getDeclaredMethods0(Native Method)
        at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
        at java.lang.Class.getMethod0(Unknown Source)
        at java.lang.Class.getMethod(Unknown Source)
        at sun.launcher.LauncherHelper.getMainMethod(Unknown Source)
        at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.eclipse.swt.widgets.Composite
        at java.net.URLClassLoader$1.run(Unknown Source)
        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)
        ... 6 more

C:\Users\Arturas>

有什么解决办法吗?我只是因为这个而讨厌 java...当您希望它在桌面上运行时,它永远无法运行...对不起,我真的为此感到压力很大,我反应过度...

有什么想法会导致这种情况吗?我也不在其他计算机上工作。现在它使用的是 Java 1.7。该应用程序在 Eclipse 上完美运行。

【问题讨论】:

  • 创建 JAR 时,它只包含您编写的类,不包含任何第三方依赖项。 (如 SWT。)在 IDE 之外运行项目时,您需要使用 -cp 参数到 java.exe 来创建一个包含类路径上的这些依赖项的启动器。
  • FWIW,Eclipse 应该能够生成某种分发包,将您的应用程序所需的所有.jars 放在一个目录中。
  • @millimoose 嗯,我想这就是我需要的,我需要它将所有东西打包到一个 Jar 中(这就是我选择导出到 jar 的原因?)。那怎么办呢?
  • 导出到 JAR 几乎总是意味着“将 my 代码导出到 JAR 中”。 (这个想法是您负责为您的应用程序设置所需的 classpath。)第三方 JAR 必须重新打包,或手动包含在 classpath 中。 digitaljoel 的回答指出了一些可以进行这种重新打包的工具。
  • 将您的项目导出为可运行的 jar 以获得快速解决方案。这应该包括依赖的罐子。长期 - 您需要确定是什么导致 org/eclipse/swt/widgets/Composite 包含在您的程序中并将其删除。

标签: java eclipse exception jar export


【解决方案1】:

您需要获取依赖项。看起来您依赖于 swt,它不是核心 java 语言的一部分。您需要获取您所依赖的所有第三方 jar,并将它们包含在您的类路径中。它可以在 eclipse 上完美运行,因为 eclipse 会为您设置类路径。

您可以按照documentation 中的说明在清单文件中设置类路径,或者您可以包含一个脚本来启动您的应用程序,该脚本将在运行 jar 时使用-cp 命令,或者您可以使用一些可以像this question 的解决方案一样,将所有内容打包到一个怪物罐中。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-08
  • 2015-12-09
  • 1970-01-01
  • 2016-05-25
  • 1970-01-01
  • 1970-01-01
  • 2020-06-15
相关资源
最近更新 更多