Di bawah ini adalah komponen JNative
jnative.sourceforge.net/ Buka di sini untuk mengunduh proyek sumber terbuka JNative. Saya mengunduh 1.3.2
Buka zip JNative-<st1:chsdate isrocdate="False" islunardate="False" day="30" moon="12" year="1899">1.3.2</st1:chsdate>.zip
Dapatkan tiga file yaitu: JNativeCpp.dll, libJNativeCpp.so, JNative.jar.
JNativeCpp.dll digunakan di Windows, salin ke direktori windows/system32;
libJNativeCpp.so di Linux, salin ke direktori sistem;
JNative.jar Ini adalah paket ekstensi. Impor ke LIB proyek atau salin ke jdk/jre/lib/ext, dan sistem akan memuatnya secara otomatis.
•Petunjuk Penggunaan
Proyek saya akan menggunakan komponen JNative untuk memanggil file TestAppSvr.dll yang menguji status server aplikasi. File Dll berisi metode TestConnect() yang mengembalikan hasil integer (1 atau 0)
Pertama-tama konfigurasikan lingkungan windows dari komponen JNative:
Tempatkan JNativeCpp.dll yang Native perlu gunakan di bawah /WINDOWS/system32 pada disk sistem
Impor JNative.jar ke dalam proyek dan buat kelas panggilan baru:
kode java
impor java.io.File;
impor java.io.FileOutputStream;
impor java.io.IOException;
impor java.io.InputStream;
import org.xvolks.jnative.JNative;
import org.xvolks.jnative.Type;
import org.xvolks.jnative.Exceptions.NativeException;
AppSvrTestConnect kelas publik {
publik AppSvrTestConnect() {
}
/**
* Uji status koneksi server aplikasi
*
*UjiHubungkan
* @param ip IP server aplikasi
* @pelabuhan port param
* @param intrcpt Apakah akan menggunakan metode kompresi data 1:benar 0:salah
* @return int 1: sukses 0: gagal
* @melempar NativeException
* @melempar IllegalAccessException
*/
private static final int TestConnect(String ip, int port, int intrcpt)melempar NativeException, IllegalAccessException {
JNatif n = nol;
mencoba {
n = new JNative("TestAppSvr.dll", "TestConnect");
n.setRetVal(Tipe.INT);
ke dalam saya = 0;
n.setParameter(i++, Tipe.STRING, ip);
n.setParameter(i++, Type.INT, "" + port);
n.setParameter(i++, Type.INT, "" + intrcpt);
n.memanggil();
return Integer.parseInt(n.getRetVal());
} Akhirnya {
jika (n != nol)
n.buang();
}
}
/**
* Tentukan jalur file Dll, muat pustaka tautan lokal secara dinamis, dan uji status koneksi server aplikasi
* setDllPath
* @param path Path ke file Dll, tidak termasuk nama DLL Misalnya: windows - d:/test/test/ unix - root/test/test/.
* @param ip IP server aplikasi
* @pelabuhan port param
* @param intrcpt Apakah akan menggunakan metode kompresi data 1:benar 0:salah
* @return int 1: sukses 0: gagal
* @melempar NativeException
* @melempar IllegalAccessException
*/
public static final int TestConnectFromDllPath(String path,String ip, int port, int intrcpt) melempar NativeException, IllegalAccessException{
jalur += "TestAppSvr.dll";
Sistem.beban(jalur);
kembali TestConnect(ip,port,intrcpt);
}
/**
* File Dll ditempatkan di bawah direktori JRE/bin, dan ClassLoader dapat secara dinamis memuat pustaka tautan lokal melalui System.loadLibrary()
* TesConnectFromDllPath
* @param ip IP server aplikasi
* @pelabuhan port param
* @param intrcpt Apakah akan menggunakan metode kompresi data 1:benar 0:salah
* @return int 1: sukses 0: gagal
* @melempar NativeException
* @melempar IllegalAccessException
*/
public static final int TestConnectFromDllPath(String ip, int port, int intrcpt) melempar NativeException, IllegalAccessException{
System.loadLibrary("TestAppSvr");
kembali TestConnect(ip,port,intrcpt);
}
}
Kelas ini mengimplementasikan metode privat statis, yang digunakan untuk memanggil metode dalam file Dll dan mengembalikan hasilnya.
TestConnect int akhir statis pribadi (String ip, int port, int intrcpt)
Dua metode publik statis, memuat file DLL dengan dua cara
public static final int TestConnectFromDllPath(String path,String ip, int port, int intrcpt) //Jalur melalui file DLL
public static final int TestConnectFromDllPath(String ip, int port, int int intrcpt) //Melalui ClassLoader dan kemudian membuat kelas baru, panggil AppSvrTestConnect.java, terapkan metode satu panggilan, saya meletakkan file TestAppSvr.dll dan Demo.java di tempat yang sama direktori , jadi setelah mendapatkan jalur Demo.java, Anda bisa mendapatkan jalur TestAppSvr.dll, dan memanggil metode AppSvrTestConnect.TestConnectFromDllPath() dapat mengembalikan informasi yang benar. Metode kedua adalah dengan menempatkan TestAppSvr.dll di Jre/. direktori bin. Ini akan secara otomatis dimuat di Classloader JVM, dan kemudian file DLL dapat dirakit melalui System.loadLibrary("TestAppSvr").
kode java
Jalur string=getClass().getResource(File.separator).getPath();
jalur = jalur.substring(1,jalur.panjang());
System.out.println(path); //Dapatkan jalur file DLL
String ip = "192.168.0.48"; //IP Server
int pelabuhan = 221; //pelabuhan
int intrcpt = 1; //Kompresi data dikirimkan, 1 berarti menggunakannya; 0 berarti tidak menggunakannya
//Metode 1 Melewati jalur file Dll
//int info = AppSvrTestConnect.TestConnectFromDllPath(jalur, ip, port, intrcpt);
//Metode 2 File Dll telah ditempatkan di bawah direktori JRE/bin
int info = AppSvrTestConnect.TestConnectFromDllPath(ip, port, intrcpt);
//1 berhasil, 0 gagal
jika (informasi == 1)
System.out.println("Server aplikasi tersedia.");
kalau tidak
System.out.println("Server aplikasi tidak tersedia, harap periksa apakah alamat IP dan port sudah benar.");
informasi pengembalian;
}
System.loadLibrary(): Muat pustaka tautan lokal di bawah direktori Windows/System32 atau jre/bin atau Tomcat/bin
System.load(): Tambahkan pustaka tautan lokal sesuai dengan direktori tertentu, yang harus berupa jalur absolut
•Komentar
Proyek contoh di atas, karena merupakan contoh, tidak memiliki banyak desain, hanya mengimplementasikan pemuatan file DLL, memanggil metode file DLL, dan mengembalikan informasi.
Untuk petunjuk rinci tentang JNative, silakan lihat program sumber JNative dan contohnya.
Perhatikan bahwa JVM hanya mengizinkan ClassLoader default untuk memuat pustaka asli, dan tidak menyediakan API khusus untuk membongkar pustaka asli yang dimuat, jadi saat men-debug proyek, mulai Server Web secara mandiri.