2016-05-09 32 views
1

こんにちは、私はEclipseからアプリケーションを実行していますが、完璧に動作しますが、実行可能なjarとしてエクスポートすると実行されません。 私はそれは私がちょうど「サブフォルダにコピー必要なライブラリ」でそれをエクスポートした後、最初のerrrorがある2つのいずれかのエラーが与えCMDからそれを実行してみてください。私はサブを変更するとき.jarからアプリケーションを実行するとJavaのエラーが発生する

Exception in thread "main" java.lang.UnsatisfiedLinkError: no j3dcore-ogl in java.library.path 
    at java.lang.ClassLoader.loadLibrary(Unknown Source) 
    at java.lang.Runtime.loadLibrary0(Unknown Source) 
    at java.lang.System.loadLibrary(Unknown Source) 
    at javax.media.j3d.NativePipeline$1.run(NativePipeline.java:189) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at javax.media.j3d.NativePipeline.loadLibrary(NativePipeline.java:180) 
    at javax.media.j3d.NativePipeline.loadLibraries(NativePipeline.java:137) 
    at javax.media.j3d.MasterControl.loadLibraries(MasterControl.java:948) 
    at javax.media.j3d.VirtualUniverse.<clinit>(VirtualUniverse.java:280) 
    at javax.media.j3d.Canvas3D.<clinit>(Canvas3D.java:3862) 
    at Main.Game.<init>(Game.java:39) 
    at Main.Main.main(Main.java:6) 

Exception in thread "main" java.lang.NoClassDefFoundError: javax/media/j3d/Canvas3D 
     at Main.Main.main(Main.java:6) 
    Caused by: java.lang.ClassNotFoundException: javax.media.j3d.Canvas3D 
    at java.net.URLClassLoader.findClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    ... 1 more 

私はいくつかの方法でそれを実行している試してみました:

1.

IslandDomination_libからフォルダの名前はちょうどそれが私に別のエラーを与えるはlib

package main; 
import java.io.File; 
import java.io.IOException; 

public class Main { 
    public static void main(String[] args) throws IOException,  InterruptedException{ 
    ProcessBuilder pb = new ProcessBuilder(System.getProperty("java.home")+"\\bin\\java.exe", "-cp" , "\"lib/j3dcore.jar;lib/j3dutils.jar;lib/vecmath.jar\"" , "-jar" , "IslandDomination.jar"); 
    pb.directory(new File("./")); 
    Process p = pb.start(); 
    p.waitFor(); 
    } 
} 

私のjarファイルの内部構造が4つのフォルダで構成されています:

J3DBool 
Main 
Maths 
META-INF 

私のためにそれを実行するために別のJavaプログラムを使用して3210

2.

java.exe -cp "lib/j3dcore.jar;lib/j3dutils.jar;lib/vecmath.jar" -jar IslandDomination.jar 

3必要なjarファイルがあるフォルダは、メインジャーと同じフォルダにあります

+0

の隣に必要なdllファイルを置くことによって行われます使用する準備ができて。あなたはあなたの質問を更新して、あなたがあなたのアプリケーションをjarからどのように実行しているのか、あなたのjarの内部構造も表示できるようにすることができますか? – ManoDestra

+0

JOGLがありません。クラスパスにあるはずです。Java3D 1.5(旧式)はJOGL 1.1.1(旧式)を使用しています。下の私の答えを見てください。 Java3DがJOGLパイプラインを使用しない場合は、j3dcore-ogl.dllが必要です。 Java3D 1.6.0を使用することは、あまり煩雑で安全です。 – gouessej

答えて

0

クラスパスに必要なライブラリファイル(jarファイル)が見つかりません。

クラスパスにライブラリファイルを設定する必要があります。

ステップは、クラスパスを設定するには: -

MyComputer->プロパティ - > [システムの詳細設定 - >環境変数

ユーザー変数エリア内またはシステム変数のいずれかで「クラスパス」を見つけた場合には編集それはすべてのjarファイルリンクを置く。見つからない場合は新規作成(新規をクリック)し、そこにすべてのjarリンクを入れてアプリケーションを実行してみてください

+0

もし私がそうするなら、エンドユーザは自分のアプリケーションをダウンロードするときに同じことをしなければならず、これは難しいことです。エンドユーザが自分のアプリケーションを気にしないように少なくとも十分に難しいです。 –

+0

エクスポート時jarファイルは "生成されたJARに必要なライブラリをパッケージ化する"を選択します。すべてのライブラリファイルを含む単一のjarファイルを作成します。 –

+0

それはまだ私に最初のエラーを与える –

1

完全に廃止されたバージョンのJava3Dを使用しています。何らかの形でJavaライブラリパスを設定し、Javaライブラリの両方をネイティブライブラリにバンドルする必要があります。 Java3D 1.6.0 pre 12でプロジェクトを再構築するのではなく、自動ネイティブライブラリの読み込みを使用するJOGL 2に依存し、すべてがJARとしてパッケージ化されているため、ライブラリパスを変更する必要はなくなりました。クラスパスの世話をするだけです。

my tutorialに従ってください。特に最後のセクションには(多くの)詳細があります。

最後に、使用している古いバージョンは、最新のオペレーティングシステムで動作することが保証されていません。それがうまくいくなら、あなたは幸運でしょう。もしそうでなければ、誰もそれを修正しません。

+0

ok私はこれを試します –

+0

あなたが単一の太っているJARを作るための助けが必要なら、私に教えてください。私はAntを使うことをお勧めしますが、Eclipseでも動作しますが、IDEは必要ありません。これは非常に柔軟で強力です。私たちは数多くのJogAmpユーザーがそれを使用しています。何か問題が生じた場合は、お手伝いできます。私の場合は、JARをj3dcore.jar、j3dutils.jar、vecmath.jar、jogamp-fat.jarとマージします。そうすれば、エンドユーザーは環境変数を調整してライブラリパスを設定する必要がなくなり、32ビット/ 64ビットアーキテクチャを心配する必要はありません。 – gouessej

+0

jarファイルの隣に必要なdll-sがあると私の問題を解決したことがわかりました –

0

私は私の問題を解決する方法を発見し、それが単にちょうどそのjarファイルが含まれており、それが実際にクラスパス上で見つかったことを確認するために、あなたの実行時クラスパスを更新し、実行可能jarファイル

+0

j3dcore-ogl.dllは、Java3D 1.5がネイティブOpenGLパイプラインを使用する場合にのみ使用されます(j3d.rendを参照)。 Java3D 1.5がJOGLパイプラインを使用する場合、JavaライブラリとJOGLのネイティブライブラリも必要です。私が知る限り、Java3D 1.5はWindows 32ビットとWindows 64ビットで同じパイプラインを使用しません。したがって、あなたは問題のほんの一部を修正しています。 – gouessej

関連する問題