WorldWind - Runnable jar:java.library.path中没有gluegen-rt

时间:2012-06-12 11:40:04

标签: java jar worldwind

我正在使用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文件,这仍然是受欢迎的。

1 个答案:

答案 0 :(得分:0)

你看过一个罐子吗?它有一个系统,用于将本机库打包到应用程序jar中。

http://one-jar.sourceforge.net/index.php?page=details&file=native