我正在使用WorldWind Java和Eclipse。
我正在尝试从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和gluegen-rt-natives-linux-amd64.jar .so文件位置。 目前,该项目只是一个显示WorldWind地球仪的JFrame,如gov.nasa.worldwindx.examples.SimplestPossibleExample.java。
我正在尝试构建一个可在多个操作系统上运行的应用程序。
在Eclipse中没有问题的情况下运行项目时,我的jar无法运行,我做错了什么?
我认为在使用本机库导出jar的过程中存在问题,但在Google上查找后我无法找到解决方案。
我使用OpenJDK在Linux 64位上运行。
感谢。
编辑:
我发现了一种使其有效的解决方法,但不是我喜欢的方式:
似乎Eclipse的“Export Runnable Jar ...”不会以运行jar时可访问的方式导出.so文件,而所需的.jar文件包含在导出的.jar中且可以访问
解决方案是在jar旁边的文件夹中包含.so文件(这些用于Mac的.jnilib和用于Windows的.dll),并使用以下命令行激活jar:java -Xmx512m -Dsun.java2d.noddraw=true -Djava.library.path=./lib -jar MyJAR.jar
-Xmx512m
正在增加java内存,因为WorldWind可能需要比默认值更多的内存,-Dsun.java2d.noddraw=true
可以避免一些显示错误IIRC。
我制作了一个包含此命令行的.bash和.bat文件。
从我发现的情况来看,只要.dll文件与.jar位于同一文件夹中,就不会在Windows上设置lib位置,但在Linux上总是需要它。由于我将库放在与.jar位于同一文件夹的lib文件夹中,因此我需要在两种情况下都设置-Djava.library.path
。
Linux所需的库是: libgluegen-rt.so libjogl.so libjogl_awt.so
我在这里找到了这些:http://download.java.net/media/jogl/builds/archive/
现在导出的jar在我的Lunix 64位系统上正常运行,我正在尝试找到一个Windows和Mac系统来测试它。
如果有人有解决方案来访问.jar文件中的.so文件,这仍然是受欢迎的。
答案 0 :(得分:0)
http://one-jar.sourceforge.net/index.php?page=details&file=native