我正在使用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文件中的文件,這仍然是受歡迎的。
恕我直言,這不是很好。整個想法是將所有的gluegen和jogl包含在一個大的可運行的jar(超級jar)中,並且不用像libs那樣使用它。 –
但有時你會得到這個要求。所以Autar發現的解決方案不適合我。 – Romczyk