2011-10-10 15 views
0

JNI経由でネイティブメソッドを使用するJavaプログラムがあります。私のJavaコードは基本的に私の.dllからネイティブメソッドを呼び出すためのGUIを実装しています。私のIDE(netbeans)からコードを実行するとすべてうまくいくようですが、.jarファイルを実行しようとすると.dllメソッドにアクセスできないようです。JVMでJNIベースの.jarを実行中

互換性の理由から(たとえ私が64ビットバージョンのwindows7を実行していても)32ビットライブラリでjavaプログラムをコンパイルしました。私は32ビットJavaプラットフォームで.jarを実行しようとしましたが、GUIは通常64ビットバージョンを使用しているようにも表示されませんでした。私はまた、 "system.loadlibrary"コマンドを使用しているので、.dllパスは相対パスでなければなりません。

エラーは「AMD 64ビットプラットフォームでIA 32ビットの.dllをロードできません...だ」とエラーが表示されます。私がJavaの32ビット版から実行すると、「jarfileにアクセスできません...」と表示されます。これにはどんな方法がありますか?プログラムが私のIDEから実行されているという事実は私に、これへの道があるべきだと私に考えさせる。理想的には私のプログラムが32ビットマシンで動くようにしたいので、私はプログラムを64ビットにしたくありません。

また、コンパイラは「ブートストラップクラスパスはソース1.6と組み合わせて設定されていません」という警告をスローしますが、これが私の問題と関連するかどうかはわかりません。

答えて

0

システムプロパティjava.library.pathは、ライブラリをロードするときにJavaが参照するパスをSystem.loadLibrary()と定義します。 Windowsの場合、デフォルトでは、現在のディレクトリ(つまり、アプリケーションが起動されたディレクトリ)とJRE binディレクトリとWindowsのsystem32ディレクトリがあります。

あなたはJVMを起動するときに引数-Djava.library.path=<path to your DLL file>を入れて、それが違いを生むかどうか試してみることができます。

絶対パスを使用してライブラリファイルを強制的に読み込み、System.load()を使用することもできます。

0

は、私は窓/ system32ディレクトリに.dllファイルをコピーしようとした

が働いているべきジャワ/ jdk1.7.0/binディレクトリしかし、間違った場所。

し、JARファイルを実行する際の.jar

と同じディレクトリにJNI DLLの最高の場所は、現在のディレクトリです。

ただし、これらの問題は修正されていません。

どの問題がありますか?まだエラーメッセージを表示していません。

+0

@Ben DLLまたはその中のメソッドが見つからない場合は、例外がスローされます。それを見つけて投稿してください。 – EJP

+0

質問をエラーメッセージで更新しました。 – Ben

関連する問題