2012-06-12 45 views
4

我正在使用WorldWind Java和Eclipse。WorldWind - Runnable jar:java.library.path中沒有gluegen-rt

我想從我的項目在Eclipse中導出一個可運行的jar。出口順利,但是當我嘗試運行jar我得到這個錯誤:

Exception in thread "main" java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:616) 
    at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58) 
Caused by: java.lang.UnsatisfiedLinkError: no gluegen-rt in java.library.path 
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1681) 
    at java.lang.Runtime.loadLibrary0(Runtime.java:840) 
    at java.lang.System.loadLibrary(System.java:1047) 
    at com.sun.gluegen.runtime.NativeLibLoader.loadLibraryInternal(NativeLibLoader.java:102) 
    at com.sun.gluegen.runtime.NativeLibLoader.access$000(NativeLibLoader.java:51) 
    at com.sun.gluegen.runtime.NativeLibLoader$1.run(NativeLibLoader.java:70) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.gluegen.runtime.NativeLibLoader.loadGlueGenRT(NativeLibLoader.java:68) 
    at com.sun.gluegen.runtime.NativeLibrary.ensureNativeLibLoaded(NativeLibrary.java:399) 
    at com.sun.gluegen.runtime.NativeLibrary.open(NativeLibrary.java:163) 
    at com.sun.gluegen.runtime.NativeLibrary.open(NativeLibrary.java:129) 
    at com.sun.opengl.impl.x11.DRIHack.begin(DRIHack.java:109) 
    at com.sun.opengl.impl.x11.X11GLDrawableFactory.<clinit>(X11GLDrawableFactory.java:99) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:186) 
    at javax.media.opengl.GLDrawableFactory.getFactory(GLDrawableFactory.java:111) 
    at javax.media.opengl.GLCanvas.chooseGraphicsConfiguration(GLCanvas.java:520) 
    at javax.media.opengl.GLCanvas.<init>(GLCanvas.java:131) 
    at javax.media.opengl.GLCanvas.<init>(GLCanvas.java:90) 
    at gov.nasa.worldwind.awt.WorldWindowGLCanvas.<init>(Unknown Source) 

我可以毫無問題運行在Eclipse中的項目,我有worldwind.jar,jogl.jar,gluegen-rt.jar中和使用本機庫.so文件位置在構建路徑中引用的gluegen-rt-natives-linux-amd64.jar。 目前該項目只是一個顯示WorldWind地球的JFrame,如gov.nasa.worldwindx.examples.SimplestPossibleExample.java。

我想構建一個應用程序,可以在多個操作系統上運行。

我在做什麼錯我的jar無法運行,而我可以在Eclipse中運行沒有問題的項目?

我想我在導出jar與本地庫的過程中有問題,但在Google上找到它之後,我找不到解決方案。

我使用OpenJDK在Linux 64位上運行。

謝謝。


編輯:

我發現了一個變通方法,使得它的工作,但不是我喜歡它的方式:

看來Eclipse的「出口運行的JAR ......」沒有按」 t導出.so文件的方式使得它們在我運行jar時可訪問,而requiered .jar文件包含在導出的.jar中並且可以訪問。

的解決方案是包含.so文件(這些將被.jnilib爲Mac和.dll適用於Windows)旁邊的罐子和空空用下面的命令行的jar文件夾中:java -Xmx512m -Dsun.java2d.noddraw=true -Djava.library.path=./lib -jar MyJAR.jar

-Xmx512m是由於WorldWind可能需要比默認金額更多的內存,所以增加java內存,可以避免一些顯示錯誤IIRC。

我做了一個.bash和一個包含這個命令行的.bat文件。

從我發現的情況來看,只要.dll文件與.jar位於同一文件夾中,似乎並沒有設置lib位置在Windows上被請求,儘管在Linux上它始終是需要的。因爲我把這些庫放在一個lib文件夾中,與.jar文件夾在同一個文件夾中,所以我需要在兩種情況下設置-Djava.library.path

爲Linux所需的庫: libgluegen-rt.so libjogl.so libjogl_awt.so

我發現那些在這裏:http://download.java.net/media/jogl/builds/archive/

現在出口罐子運行正常我LUNIX 64位系統,我目前正在試圖找到一個Windows和Mac系統來測試它。

如果有人有解決方案可以訪問。所以在.jar文件中的文件,這仍然是受歡迎的。

+2

恕我直言,這不是很好。整個想法是將所有的gluegen和jogl包含在一個大的可運行的jar(超級jar)中,並且不用像libs那樣使用它。 –

+0

但有時你會得到這個要求。所以Autar發現的解決方案不適合我。 – Romczyk

回答