【发布时间】:2011-04-24 19:15:19
【问题描述】:
我最近一直在打包一个项目,但它变成了一场噩梦。简而言之,这就是问题所在。我有一个项目,我想将其作为 jar 文件,并最终将其用作 Java Web Start。
当我尝试通过 Eclipse 构建和运行代码时,它运行良好。但是,当我将它导出为“可运行 jar”并尝试通过终端运行它时,我得到了似乎依赖于引用库的神秘异常。我已经检查了 jar 文件中是否存在这些库,所以并不是它们丢失了。
根据我如何导出它,异常的细节会发生变化,而它似乎源于同一个问题。下面是导出项目时抛出的堆栈跟踪,其中依赖库打包为“主”jar 中的 jar。
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: java.lang.ExceptionInInitializerError
at org.eclipse.gef.tools.MarqueeSelectionTool.<init>(MarqueeSelectionTool.java:99)
at org.gvt.MarqueeZoomTool.<init>(MarqueeZoomTool.java:16)
at org.gvt.action.MarqueeZoomToolAction$1.<init>(MarqueeZoomToolAction.java:28)
at org.gvt.action.MarqueeZoomToolAction.createTool(MarqueeZoomToolAction.java:28)
at org.gvt.action.AbstractGEFToolAction.<init>(AbstractGEFToolAction.java:24)
at org.gvt.action.MarqueeZoomToolAction.<init>(MarqueeZoomToolAction.java:20)
at org.gvt.TopMenuBar.createBarMenu(TopMenuBar.java:113)
at org.gvt.ChisioMain.createMenuManager(ChisioMain.java:612)
at org.eclipse.jface.window.ApplicationWindow.addMenuBar(ApplicationWindow.java:235)
at org.gvt.ChisioMain.main(ChisioMain.java:144)
... 5 more
Caused by: java.lang.IllegalArgumentException: Argument cannot be null
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.graphics.Resource.<init>(Unknown Source)
at org.eclipse.swt.graphics.Cursor.<init>(Unknown Source)
at org.eclipse.draw2d.Cursors.<clinit>(Cursors.java:170)
... 15 more
顺便说一句,我保存了导出过程的 XML / ANT 输出,如果感兴趣的话,我可以添加她。为了减少混乱,我选择省略它。
关于这里可能存在什么问题的任何想法?
编辑:我开始考虑是否是 SWT-GTK 库的 32/64 位问题。任何人都可以确认或否认这一点吗?
【问题讨论】:
-
IIRC,Eclipse 允许您指定与命令行不同的类路径;您的 JAR 中可能缺少一些依赖项/库。
-
据我所知,所有的库都包含在jar文件中,我特别检查了swt包:swt-3.4.2-gtk-linux-x86.jar。至于类路径,运行配置中没有任何具体内容。这真的很奇怪,因为我设法用同一个项目的旧版本做同样的事情,而且我不记得有这么多问题。
-
如果在 Windows 上尝试以 Administrator 身份运行