يوجد أدناه مكون 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؛
import java.io.FileOutputStream;
import java.io.IOException;
استيراد java.io.InputStream؛
import org.xvolks.jnative.JNative;
import org.xvolks.jnative.Type;
import org.xvolks.jnative.exceptions.NativeException;
الطبقة العامة AppSvrTestConnect {
عامة AppSvrTestConnect() {
}
/**
* اختبار حالة اتصال خادم التطبيق
*
*اختبار الاتصال
* @param IP خادم تطبيق IP
* @param منفذ المنفذ
*param intrcpt ما إذا كان سيتم استخدام طريقة ضغط البيانات 1:صحيح 0:خطأ
* @return int 1: النجاح 0: الفشل
* @throws NativeException
* @throws IllegalAccessException
*/
نهائي ثابت خاص int TestConnect(String ip, int port, int intrcpt) يلقي NativeException, IllegalAccessException {
JNative n = null;
يحاول {
n = new JNative("TestAppSvr.dll", "TestConnect");
n.setRetVal(Type.INT);
كثافة العمليات ط = 0؛
n.setParameter(i++, Type.STRING, ip);
n.setParameter(i++, Type.INT, "" + port);
n.setParameter(i++, Type.INT, "" + intrcpt);
n.invocation();
return Integer.parseInt(n.getRetVal());
} أخيراً {
إذا (ن ! = فارغة)
n.dispose();
}
}
/**
* تحديد مسار ملف Dll، وتحميل مكتبة الارتباط المحلية ديناميكيًا، واختبار حالة اتصال خادم التطبيق
* تعيينDllPath
*param path المسار إلى ملف DLL، باستثناء اسم DLL على سبيل المثال: windows - d:/test/test/ unix - root/test/test/.
* @param IP خادم تطبيق IP
* @param منفذ المنفذ
*param intrcpt ما إذا كان سيتم استخدام طريقة ضغط البيانات 1:صحيح 0:خطأ
* @return int 1: النجاح 0: الفشل
* @throws NativeException
* @throws IllegalAccessException
*/
public static Final int TestConnectFromDllPath(String path,String ip, int port, int intrcpt) يلقي NativeException, IllegalAccessException{
المسار += "TestAppSvr.dll";
System.load(path);
return TestConnect(ip,port,intrcpt);
}
/**
* يتم وضع ملف Dll ضمن دليل JRE/bin، ويمكن لـ ClassLoader تحميل مكتبة الارتباط المحلية ديناميكيًا من خلال System.loadLibrary()
* اختبارConnectFromDllPath
* @param IP خادم تطبيق IP
* @param منفذ المنفذ
*param intrcpt ما إذا كان سيتم استخدام طريقة ضغط البيانات 1:صحيح 0:خطأ
* @return int 1: النجاح 0: الفشل
* @throws NativeException
* @throws IllegalAccessException
*/
int النهائي العام الثابت TestConnectFromDllPath(String ip, int port, int intrcpt) يلقي NativeException, IllegalAccessException{
System.loadLibrary("TestAppSvr");
return TestConnect(ip,port,intrcpt);
}
}
تطبق هذه الفئة أسلوبًا خاصًا ثابتًا، والذي يُستخدم لاستدعاء الأساليب في ملفات Dll وإرجاع النتائج.
TestConnect النهائي الثابت الخاص (String ip، int port، int intrcpt)
طريقتان عامتان ثابتتان لتحميل ملفات 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، وقم بتنفيذ استدعاء الطريقة الأولى، ووضع ملف TestAppSvr.dll وDemo.java في نفس الشيء الدليل ، لذلك بعد الحصول على مسار Demo.java، يمكنك الحصول على مسار TestAppSvr.dll، ويمكن أن يؤدي استدعاء أسلوب AppSvrTestConnect.TestConnectFromDllPath() إلى إرجاع المعلومات الصحيحة. الطريقة الثانية هي وضع TestAppSvr.dll في Jre/. سيتم تحميل دليل bin تلقائيًا في Classloader الخاص بـ JVM، ومن ثم يمكن تجميع ملف DLL من خلال System.loadLibrary("TestAppSvr").
كود جافا
String path=getClass().getResource(File.separator).getPath();
المسار = path.substring(1,path. length());
System.out.println(path); //احصل على مسار ملف DLL
String ip = "192.168.0.48"; // IP للخادم
ميناء صحيح = 221؛
int intrcpt = 1; // يتم إرسال ضغط البيانات، 1 يعني استخدامه؛
// الطريقة الأولى تمرير مسار ملف Dll
//int info = AppSvrTestConnect.TestConnectFromDllPath(path, ip, port, intrcpt);
// الطريقة الثانية تم وضع ملف Dll ضمن دليل JRE/bin
int info = AppSvrTestConnect.TestConnectFromDllPath(ip, port, 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 الافتراضي بتحميل المكتبة الأصلية، ولا يوفر واجهة برمجة تطبيقات خاصة لإلغاء تحميل المكتبة الأصلية المحملة، لذلك عند تصحيح أخطاء المشروع، قم بتشغيل خادم الويب بشكل مستقل.