2010-10-13 42 views
3

我一直在最近打包一個項目,但它已經變成了一場噩夢。所以這裏就是問題了。我有一個我想作爲jar文件的項目,並最終將其用作Java Web Start。通過java -jar執行失敗,而相同的代碼通過eclipse運行良好

當我嘗試通過Eclipse構建和運行代碼時,它工作正常。但是,當我將它作爲「可運行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位問題。任何人都可以確認或否認這一點?

+0

IIRC,Eclipse允許你指定比你在命令行上不同的類路徑;你可能會在你的JAR中缺少一些依賴/庫。 – Piskvor 2010-10-13 11:36:41

+0

據我所知,所有庫都包含在jar文件中,我特別檢查了swt包:swt-3.4.2-gtk-linux-x86.jar。 至於類路徑,在運行配置中沒有任何特定的內容。這真的很奇怪,因爲我已經設法對同一個項目的舊版本做同樣的事情,我不記得有這麼多問題。 – posdef 2010-10-13 11:53:54

+0

如果在** Windows **上嘗試以** Administrator **身份運行** – 2014-04-23 13:44:09

回答

0

您在這裏的異常與依賴關係無關。這是一個編程錯誤:「有人將一個空參數傳遞給不允許它的SWT方法)。

根據堆棧跟蹤你使用的是GEF。你如何在Eclipse中運行你的代碼,如java應用程序還是Eclipse應用程序?

如果您正在談論Eclipse應用程序,您不能簡單地將它導出爲可運行Jar,您將不得不創建RCP,請參閱Google for RCP教程,您會發現很多有趣的結果

+0

我確實意識到那裏存在空參數問題,但是如果它與我的編程有任何關係,它將在從Eclipse運行時無法執行。代碼以Java應用程序運行btw – posdef 2010-10-13 11:46:48

+0

因此,您有一個使用SWT/Draw2d/GEF的獨立Java應用程序。這樣對嗎 ?仔細觀察之後,看起來您在創建光標時出現錯誤。根據SWT:「ERROR_NULL_ARGUMENT - 如果設備爲空且沒有當前設備」因爲Draw2d以靜態方式創建具有空參數的SWT遊標,所以它依賴於存在當前設備的事實。這意味着當前線程是我認爲的主線程。 – 2010-10-13 11:55:37

+0

我不是100%確定我關注那個,但是爲什麼在終端運行時繪製光標會出現問題,而在通過eclipse運行軟件時顯然沒有問題? – posdef 2010-10-14 07:33:19

相關問題