我现在被这个问题困扰了 10 小时。
mvn clean compile install
编译代码就好了。当我尝试运行捆绑的 JAR 时出现问题,该 JAR 构建为包含所有依赖项。仅供参考,它也在尝试在 Eclipse 中运行项目时发生。
我在通过 Eclipse IDE-verbose:class
运行它时尝试使用as VM args。java jar
输出显示 JVM 正在加载“错误”类,但我仍然得到异常。
还尝试了许多其他选项,例如将 SWT 本机库提取到与 JAR 相同的路径,但这也不起作用。清理我的 m2 缓存的相关部分没有帮助。我还仔细检查了捆绑的 JAR 中缺少的类,你猜怎么着?它就在那里。
正如你们中的大多数人可能已经理解的那样,这是一个更大的项目的一部分,无法(轻松)创建一个小测试用例。我试图创建一个小样本(没有 Maven)并且它正在工作。另一个(可能)相关的信息是我在同一个类中同时使用 SWT 和 JavaFX,遵循有关如何混合它们的工作配方。我正在使用 Oracle JDK 1.7。
更新:尝试将“小样本”移动到 Maven 并且运行正常,到目前为止。我想这个问题与 Maven 依赖或其他东西无关。
更新:我设法创建了一个有同样问题的小项目。这是一个 Eclipse 项目,但应该可以在没有 IDE 的情况下轻松运行(因为它是一个 Maven 项目)。它依赖于 SWT 的 Linux x64 版本,但您也可以更改该依赖关系。请查看https://dl.dropboxusercontent.com/u/5319290/swtjfx.tar.gz
异常堆栈跟踪:
Exception in thread "main"
java.lang.NoClassDefFoundError: org/eclipse/swt/widgets/Canvas
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at java.lang.ClassLoader.loadClass(ClassLoader.java:412)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2531)
at java.lang.Class.getMethod0(Class.java:2774)
at java.lang.Class.getMethod(Class.java:1663)
at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486)
[Loaded java.util.Objects from /usr/lib/jvm/java-7-oracle/jre/lib/rt.jar]
Caused by: java.lang.ClassNotFoundException: org.eclipse.swt.widgets.Canvas
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 19 more
-verbose:class
输出:
...
[Loaded org.eclipse.swt.widgets.Layout from file:/home/me/myapp-jar-with-dependencies.jar]
[Loaded org.eclipse.swt.layout.FillLayout from file:/home/me/myapp-jar-with-dependencies.jar]
[Loaded org.eclipse.swt.graphics.Drawable from file:/home/me/myapp-jar-with-dependencies.jar]
[Loaded org.eclipse.swt.widgets.Widget from file:/home/me/myapp-jar-with-dependencies.jar]
[Loaded org.eclipse.swt.widgets.Control from file:/home/me/myapp-jar-with-dependencies.jar]
[Loaded org.eclipse.swt.widgets.Scrollable from file:/home/me/myapp-jar-with-dependencies.jar]
[Loaded org.eclipse.swt.widgets.Composite from file:/home/me/myapp-jar-with-dependencies.jar]
[Loaded org.eclipse.swt.widgets.Canvas from file:/home/me/myapp-jar-with-dependencies.jar]
[Loaded org.eclipse.swt.widgets.Decorations from file:/home/me/myapp-jar-with-dependencies.jar]
[Loaded org.eclipse.swt.widgets.Shell from file:/home/me/myapp-jar-with-dependencies.jar]
[Loaded java.lang.ClassFormatError from /usr/lib/jvm/java-7-oracle/jre/lib/rt.jar]
[Loaded java.lang.NoSuchMethodException from /usr/lib/jvm/java-7-oracle/jre/lib/rt.jar]
[Loaded java.lang.Throwable$PrintStreamOrWriter from /usr/lib/jvm/java-7-oracle/jre/lib/rt.jar]
[Loaded java.lang.Throwable$WrappedPrintStream from /usr/lib/jvm/java-7-oracle/jre/lib/rt.jar]
[Loaded java.util.IdentityHashMap from /usr/lib/jvm/java-7-oracle/jre/lib/rt.jar]
[Loaded java.util.IdentityHashMap$KeySet from /usr/lib/jvm/java-7-oracle/jre/lib/rt.jar]
[Loaded java.util.Objects from /usr/lib/jvm/java-7-oracle/jre/lib/rt.jar]
[Loaded java.lang.Shutdown from /usr/lib/jvm/java-7-oracle/jre/lib/rt.jar]
[Loaded java.lang.Shutdown$Lock from /usr/lib/jvm/java-7-oracle/jre/lib/rt.jar]
我的POM的相关部分:
<repositories>
...
<repository>
<id>swt-repo</id>
<url>https://swt-repo.googlecode.com/svn/repo/</url>
</repository>
</repositories>
...
<dependencies>
...
<dependency>
<groupId>org.eclipse.swt</groupId>
<artifactId>org.eclipse.swt.gtk.linux.x86_64</artifactId>
<version>4.3</version>
</dependency>
</dependencies>
有什么线索吗?如果需要更多信息,请成为我的客人并索取。
谢谢你的帮助。