通过java -jar执行失败,而相同的代码通过eclipse运行良好

时间:2010-10-13 11:32:38

标签: java eclipse jar export

我最近一直致力于打包一个项目,但它已经变成了一场噩梦。简而言之,这就是问题所在。我有一个项目,我想作为一个jar文件,并最终用它作为Java Web Start。

当我尝试通过Eclipse构建和运行代码时,它工作正常。但是,当我将其导出为“可运行的jar”并尝试通过终端运行时,我会得到神秘的异常,这些异常似乎取决于引用的库。我已经检查过jar文件中的库,所以并不是它们丢失了。

根据我如何导出它,异常的细节会发生变化,而它似乎来自同一个问题。下面是导出项目时抛出的堆栈跟踪,其中依赖库作为jar包装在“main”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位问题。任何人都可以确认或否认这个吗?

2 个答案:

答案 0 :(得分:0)

此处的例外与依赖关系无关。这是一个编程错误:“有人将一个null参数传递给不允许它的SWT方法。”

根据堆栈跟踪,您正在使用GEF。如何在Eclipse中运行代码,如Java应用程序或Eclipse应用程序?

如果您正在谈论Eclipse应用程序,则不能简单地将其导出为可运行的Jar。您必须创建RCP。在Google上查看RCP教程,你会发现许多有趣的结果。

答案 1 :(得分:0)

事实证明,eclipse在我的机器上运行32位JVM(出于一些奇怪的原因),是的,它是关于SWT的os和arch特定库。对于有类似问题的人,请参阅以下主题以获取更多信息:

Problems with loading resources during execution

Running SWT based, cross-platform jar properly on a Mac

祝你好运,