以下は JNative コンポーネントです
jnative.sourceforge.net/ ここにアクセスして、JNative オープン ソース プロジェクトをダウンロードします。1.3.2 をダウンロードしました。
JNative-<st1:chsdate isrocdate="False" islunardate="False" day="30" month="12" year="1899">1.3.2</st1:chsdate>.zip を解凍します。
3 つのファイル、つまり JNativeCpp.dll、libJNativeCpp.so、JNative.jar を取得します。
JNativeCpp.dll は Windows で使用されます。これを windows/system32 ディレクトリにコピーします。
Linux では libJNativeCpp.so をシステム ディレクトリにコピーします。
JNative.jar これは拡張パッケージです。プロジェクト LIB にインポートするか、jdk/jre/lib/ext にコピーすると、システムが自動的にロードします。
・使用説明書
私のプロジェクトでは、JNative コンポーネントを使用して、アプリケーション サーバーのステータスをテストする TestAppSvr.dll ファイルを呼び出します。Dll ファイルには、整数の結果 (1 または 0) を返す TestConnect() メソッドが含まれています。
まず、JNative コンポーネントの Windows 環境を構成します。
ネイティブが使用する必要がある JNativeCpp.dll をシステム ディスクの /WINDOWS/system32 に配置します。
JNative.jar をプロジェクトにインポートし、新しい呼び出しクラスを作成します。
Javaコード
java.io.ファイルをインポートします。
java.io.FileOutputStreamをインポートします。
インポート java.io.IOException;
java.io.InputStreamをインポートします。
org.xvolks.jnative.JNative をインポートします。
org.xvolks.jnative.Type をインポートします。
org.xvolks.jnative.Exceptions.NativeException をインポートします。
パブリック クラス AppSvrTestConnect {
public AppSvrTestConnect() {
}
/**
* アプリケーションサーバーの接続ステータスをテストします
*
*テストコネクト
* @param ip アプリケーションサーバーのIP
* @param ポートポート
* @param intrcpt データ圧縮方式を使用するかどうか 1:true 0:false
* @return int 1: 成功 0: 失敗
* @throws NativeException
* @throws IllegalAccessException
*/
private static Final int TestConnect(String ip, int port, int intrcpt)throws NativeException, IllegalAccessException {
JNative n = null;
試す {
n = 新しい JNative("TestAppSvr.dll", "TestConnect");
n.setRetVal(Type.INT);
int i = 0;
n.setParameter(i++, Type.STRING, ip);
n.setParameter(i++, Type.INT, "" + ポート);
n.setParameter(i++, Type.INT, "" + intrcpt);
n.invoke();
return Integer.parseInt(n.getRetVal());
} ついに {
if (n != null)
n.dispose();
}
}
/**
* DLL ファイルのパスを指定し、ローカル リンク ライブラリを動的にロードし、アプリケーション サーバーの接続ステータスをテストします。
* setDllPath
* @param path DLL 名を除く DLL ファイルへのパス。例: windows - d:/test/test/ unix - root/test/test/。
* @param ip アプリケーションサーバーのIP
* @param ポートポート
* @param intrcpt データ圧縮方式を使用するかどうか 1:true 0:false
* @return int 1: 成功 0: 失敗
* @throws NativeException
* @throws IllegalAccessException
*/
public static Final int TestConnectFromDllPath(String path,String ip, int port, int intrcpt) throws NativeException, IllegalAccessException{
パス += "TestAppSvr.dll";
System.load(パス);
戻り TestConnect(ip,port,intrcpt);
}
/**
* DLL ファイルは JRE/bin ディレクトリの下に配置され、ClassLoader は System.loadLibrary() を通じてローカル リンク ライブラリを動的にロードできます。
* TestConnectFromDllPath
* @param ip アプリケーションサーバーのIP
* @param ポートポート
* @param intrcpt データ圧縮方式を使用するかどうか 1:true 0:false
* @return int 1: 成功 0: 失敗
* @throws NativeException
* @throws IllegalAccessException
*/
public static Final int TestConnectFromDllPath(String ip, int port, int intrcpt) throws NativeException, IllegalAccessException{
System.loadLibrary("TestAppSvr");
戻り TestConnect(ip,port,intrcpt);
}
}
このクラスは、Dll ファイル内のメソッドを呼び出して結果を返すために使用される静的プライベート メソッドを実装します。
プライベート静的最終 int TestConnect(String ip, int port, int intrcpt)
2 つの静的パブリック メソッド、2 つの方法で DLL ファイルをロード
public static Final int TestConnectFromDllPath(String path,String ip, int port, int intrcpt) //DLL ファイルのパス
public static Final int TestConnectFromDllPath(String ip, int port, int intrcpt) //ClassLoader を通じて新しいクラスを作成し、AppSvrTestConnect.java を呼び出し、メソッドを 1 回呼び出して実装し、TestAppSvr.dll ファイルと Demo.java を同じディレクトリに置きます2 番目の方法は、TestAppSvr.dll を Jre/ に配置することです。これは JVM のクラスローダーに自動的にロードされ、System.loadLibrary("TestAppSvr") を通じて DLL ファイルをアセンブルできます。
Javaコード
文字列パス=getClass().getResource(File.separator).getPath();
パス = path.substring(1,path.length());
System.out.println(path); //DLL ファイルのパスを取得します。
String ip = "192.168.0.48";
int ポート = 221;
int intrcpt = 1; //データ圧縮が送信されます。1 は使用することを意味します。0 は使用しないことを意味します。
//方法 1 DLL ファイルのパスを渡します
//int info = AppSvrTestConnect.TestConnectFromDllPath(path, ip, port, intrcpt);
//方法 2 DLL ファイルは JRE/bin ディレクトリの下に配置されています
int info = AppSvrTestConnect.TestConnectFromDllPath(ip, port, intrcpt);
//1 は成功、0 は失敗
if (情報 == 1)
System.out.println("アプリケーションサーバーが利用可能です。");
それ以外
System.out.println("アプリケーション サーバーが利用できません。IP アドレスとポートが正しいかどうかを確認してください。");
情報を返す。
}
System.loadLibrary(): Windows/System32、jre/bin、または Tomcat/bin ディレクトリにローカル リンク ライブラリをロードします。
System.load(): 特定のディレクトリに従ってローカル リンク ライブラリを追加します。これは絶対パスである必要があります。
•述べる
上記のサンプル プロジェクトはサンプルであるため、DLL ファイルの読み込み、DLL ファイル メソッドの呼び出し、情報の返しを実装するだけです。
JNative の詳細な手順については、JNative ソース プログラムとサンプルを参照してください。
JVM では、デフォルトの ClassLoader のみがネイティブ ライブラリをロードでき、ロードされたネイティブ ライブラリをアンロードするための特別な API は提供されないことに注意してください。そのため、プロジェクトをデバッグするときは、Web サーバーを個別に起動してください。