1. これらはすべて、JNI ライブラリ ファイルか非 JNI ライブラリ ファイルかに関係なく、ライブラリ ファイルをロードするために使用できます。ネイティブ メソッドを呼び出す前に、これら 2 つのメソッドのいずれかを使用して、対応する JNI ライブラリ ファイルをロードする必要があります。
2. System.load パラメータは、ライブラリ ファイルの絶対パスです。任意のパスを指定できます。
たとえば、次のように Windows プラットフォームで JNI ライブラリ ファイルをロードできます。
System.load("C://Documents and Settings//TestJNI.dll");。
3. System.loadLibrary パラメータはライブラリ ファイル名であり、ライブラリ ファイルの拡張子は含まれません。
たとえば、次のように Windows プラットフォームで JNI ライブラリ ファイルをロードできます。
System.loadLibrary (「TestJNI」);
ここで、TestJNI.dll は、jvm 変数 java.library.path が指すパスに存在する必要があります。
この変数の値は次のように取得できます。
System.getProperty("java.library.path");
デフォルトでは、Windows プラットフォームでは、この値には次の場所が含まれます。
1) jre に関連するいくつかのディレクトリ
2) プログラムのカレントディレクトリ
3) Windows ディレクトリ
4) システムディレクトリ(system32)
5) システム環境変数パスはディレクトリを指定します。
4. ロードするライブラリ ファイルが他のダイナミック リンク ライブラリに静的にリンクされている場合 (たとえば、TestJNI.dll が dependency.dll に静的にリンクされている場合)、次の点に注意する必要があります。
1) あなたが選択した場合
System.load("C://Documents and Settings// TestJNI.dll");
その後、C://Documents and Settings// に dependency.dll を配置した場合でも、依存する DLL が見つからないため、ロードは失敗します。 jvm が TestJNI.dll をロードするとき、最初に TestJNI.dll が依存するライブラリ ファイル dependency.dll がロードされますが、dependency.dll は java.library.path で指定されたディレクトリに存在しないため、jvm は依存関係を見つけることができません。 .dll。
この問題を解決するには 2 つの方法があります。 まず、C://Documents and Settings// を java.library.path のパスに追加します (たとえば、システム パスに追加します)。 2つ目は、まず電話することです
System.load("C://Documents and Settings// dependency.dll"); jvm にまず dependency.dll をロードさせてから、System.load("C://Documents and Settings// TestJNI.dll") を呼び出します。 );
2) あなたが選択した場合
System.loadLibrary (「TestJNI」);
次に、java.library.path に含まれる任意のパス (TestJNI.dll と同じディレクトリを含む) に dependency.dll を配置するだけです。