ด้านล่างนี้เป็นองค์ประกอบ 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
รับสามไฟล์ ได้แก่: JNativeCpp.dll, libJNativeCpp.so, JNative.jar
JNativeCpp.dll ถูกใช้ภายใต้ Windows คัดลอกไปยังไดเร็กทอรี windows/system32
libJNativeCpp.so ภายใต้ Linux ให้คัดลอกไปยังไดเร็กทอรีระบบ
JNative.jar นี่คือแพ็คเกจส่วนขยาย นำเข้าสู่โปรเจ็กต์ LIB หรือคัดลอกไปที่ jdk/jre/lib/ext จากนั้นระบบจะโหลดโดยอัตโนมัติ
•คำแนะนำสำหรับการใช้งาน
โครงการของฉันจะใช้ส่วนประกอบ JNative เพื่อเรียกไฟล์ TestAppSvr.dll ที่ทดสอบสถานะของแอปพลิเคชันเซิร์ฟเวอร์ ไฟล์ Dll มีเมธอด TestConnect() ที่ส่งคืนผลลัพธ์จำนวนเต็ม (1 หรือ 0)
ขั้นแรกกำหนดค่าสภาพแวดล้อม windows ขององค์ประกอบ JNative:
วาง JNativeCpp.dll ที่ Native จำเป็นต้องใช้ภายใต้ /WINDOWS/system32 บนดิสก์ระบบ
อิมพอร์ต JNative.jar เข้าสู่โปรเจ็กต์และสร้างคลาสการโทรใหม่:
รหัสจาวา
นำเข้า java.io.File;
นำเข้า java.io.FileOutputStream;
นำเข้า java.io.IOException;
นำเข้า java.io.InputStream;
นำเข้า org.xvolks.jnative.JNative;
นำเข้า org.xvolks.jnative.Type;
นำเข้า org.xvolks.jnative.Exceptions.NativeException;
AppSvrTestConnect คลาสสาธารณะ {
AppSvrTestConnect สาธารณะ () {
-
-
* ทดสอบสถานะการเชื่อมต่อเซิร์ฟเวอร์แอปพลิเคชัน
-
*ทดสอบการเชื่อมต่อ
* @param ip แอปพลิเคชันเซิร์ฟเวอร์ IP
* พอร์ตพอร์ต @param
* @param intrcpt ไม่ว่าจะใช้วิธีการบีบอัดข้อมูล 1:true 0:false
* @return int 1: สำเร็จ 0: ล้มเหลว
* @ พ่น NativeException
* @พ่น IllegalAccessException
-
TestConnect int สุดท้ายคงที่ส่วนตัว (String ip, int port, int intrcpt) พ่น NativeException, IllegalAccessException {
JNative n = โมฆะ;
พยายาม {
n = ใหม่ JNative("TestAppSvr.dll", "TestConnect");
n.setRetVal(Type.INT);
อินท์ i = 0;
n.setParameter(i++, Type.STRING, ip);
n.setParameter(i++, Type.INT, "" + พอร์ต);
n.setParameter(i++, Type.INT, "" + intrcpt);
n.วิงวอน();
กลับ Integer.parseInt(n.getRetVal());
} ในที่สุด {
ถ้า (n != null)
n.ทิ้ง();
-
-
-
* ระบุเส้นทางของไฟล์ 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: ล้มเหลว
* @ พ่น NativeException
* @พ่น IllegalAccessException
-
int สุดท้ายคงที่สาธารณะ TestConnectFromDllPath (เส้นทางสตริง, สตริง ip, พอร์ต int, int intrcpt) พ่น NativeException, IllegalAccessException {
เส้นทาง += "TestAppSvr.dll";
System.load(เส้นทาง);
ส่งคืน TestConnect (ip, พอร์ต, intrcpt);
-
-
* ไฟล์ Dll ถูกวางไว้ใต้ไดเร็กทอรี JRE/bin และ ClassLoader สามารถโหลดไลบรารีลิงก์ในเครื่องแบบไดนามิกผ่าน System.loadLibrary()
* TestConnectFromDllPath
* @param ip แอปพลิเคชันเซิร์ฟเวอร์ IP
* พอร์ตพอร์ต @param
* @param intrcpt ว่าจะใช้วิธีการบีบอัดข้อมูล 1:true 0:false หรือไม่
* @return int 1: สำเร็จ 0: ล้มเหลว
* @ พ่น NativeException
* @พ่น IllegalAccessException
-
int สุดท้ายคงที่สาธารณะ TestConnectFromDllPath (String ip, int port, int intrcpt) พ่น NativeException, IllegalAccessException {
System.loadLibrary("TestAppSvr");
ส่งคืน TestConnect (ip, พอร์ต, intrcpt);
-
-
คลาสนี้ใช้วิธีการส่วนตัวแบบคงที่ซึ่งใช้ในการเรียกวิธีการในไฟล์ Dll และส่งคืนผลลัพธ์
TestConnect int int สุดท้ายคงที่ส่วนตัว (String ip, int port, int intrcpt)
สองวิธีสาธารณะแบบคงที่ การโหลดไฟล์ DLL ได้สองวิธี
int สุดท้ายคงสาธารณะ TestConnectFromDllPath (เส้นทางสตริง, สตริง ip, พอร์ต int, int intrcpt) // เส้นทางผ่านไฟล์ DLL
int สุดท้ายคงที่สาธารณะ TestConnectFromDllPath (String ip, int port, int intrcpt) // ผ่าน ClassLoader จากนั้นสร้างคลาสใหม่และเรียก AppSvrTestConnect.java ทันทีที่มีการเรียกเมธอด ฉันจะใส่ไฟล์ TestAppSvr.dll และ Demo.java ไว้ในไดเร็กทอรีเดียวกัน ดังนั้นหลังจากได้รับพาธของ Demo.java แล้ว ฉันจะได้พาธ ของ TestAppSvr.dll และเรียก AppSvrTestConnect.Tes ข้อมูลที่ถูกต้องสามารถส่งคืนได้หลังจากเมธอด tConnectFromDllPath() วิธีที่สองคือการวาง TestAppSvr.dll ในไดเร็กทอรี Jre/bin ซึ่งจะถูกโหลดโดยอัตโนมัติใน Classloader ของ JVM จากนั้นผ่าน System.loadLibrary("TestAppSvr") สามารถประกอบไฟล์ DLL ได้
รหัสจาวา
เส้นทางสตริง=getClass().getResource(File.separator).getPath();
path = path.substring(1,path.length());
System.out.println(path); //รับเส้นทางของไฟล์ DLL
สตริง ip = "192.168.0.48"; // IP ของเซิร์ฟเวอร์
พอร์ต int = 221; // พอร์ต
int intrcpt = 1; // การบีบอัดข้อมูลถูกส่ง 1 หมายถึงกำลังใช้งาน 0 หมายถึงไม่ได้ใช้งาน
// วิธีที่ 1 ผ่านเส้นทางของไฟล์ Dll
//int info = AppSvrTestConnect.TestConnectFromDllPath (เส้นทาง, ip, พอร์ต, intrcpt);
//วิธีที่ 2 ไฟล์ Dll ถูกวางไว้ใต้ไดเร็กทอรี JRE/bin
ข้อมูล int = AppSvrTestConnect.TestConnectFromDllPath (ip, พอร์ต, intrcpt);
//1 คือความสำเร็จ 0 คือความล้มเหลว
ถ้า (ข้อมูล == 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 พิเศษเพื่อยกเลิกการโหลดไลบรารีเนทิฟที่โหลด ดังนั้นเมื่อทำการดีบั๊กโปรเจ็กต์ ให้เริ่มเว็บเซิร์ฟเวอร์โดยอิสระ