私はWorldWindJavaと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ファイルを使用してビルドパスで参照されています。位置。今のところ、プロジェクトは、gov.nasa.worldwindx.examples.SimplestPossibleExample.javaのようにWorldWindグローブを表示する単なるJFrameです。
複数のOSで動作するアプリケーションを構築しようとしています。
Eclipse内で問題なくプロジェクトを実行できるのに、jarを実行できないのはどうしてですか?
ネイティブライブラリを使用してjarをエクスポートするプロセスに問題があると思いますが、Googleでそれを探した後、これに対する解決策を見つけることができません。
私はOpenJDKを使用してLinux64ビットで実行しています。
ありがとう。
編集 :
私はそれを機能させる回避策を見つけましたが、私が望む方法ではありません:
Eclipseの「ExportRunnableJar...」は、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
WorldWindはデフォルトの量よりも多くのメモリを必要とする可能性があるため、Javaメモリを増やしています。これにより、 -Dsun.java2d.noddraw=true
IIRCの表示エラーを回避できます。
このコマンドラインを含む.bashファイルと.batファイルを作成しました。
私が見つけたところによると、.dllファイルが.jarと同じフォルダーにある限り、Windowsではlibの場所を設定する必要はないようですが、Linuxでは常に必要です。ライブラリを.jarと同じフォルダーにあるlibフォルダーに配置したので-Djava.library.path
、どちらの場合も設定する必要があります。
Linuxに必要なライブラリは次のとおりです。libgluegen-rt.solibjogl.solibjogl_awt.so
私はここでそれらを見つけました:http://download.java.net/media/jogl/builds/archive/
これで、エクスポートされたjarはLunix 64ビットシステムで正常に動作し、現在、WindowsとMacシステムを見つけてテストしようとしています。
.jarファイル内にある.soファイルにアクセスするソリューションを誰かが持っている場合でも、これは大歓迎です。