مبدأ جافا جني
JNI هي وظيفة مهمة في منصة Java Standard. إنها تعوض عن أوجه القصور في ميزة Java المهمة المتمثلة في استقلال النظام الأساسي. على الرغم من أن Java متداخلة ، إلا أنه يمكن أن يتفاعل أيضًا مع المكتبات الديناميكية للغات الأخرى (مثل C و C ++) ، مما يتيح لغات أخرى الفرصة للعب مزاياها.
بدعم من منصة Java القياسية ، يكون وضع JNI أسهل في التنفيذ والاستخدام. فيما يلي ملخص للرسم البياني المعرفة التالي:
مثال:
الوصف للبيئة: نظام Ubuntu 10.4.2 LTS
قائمة البرنامج 1: SRC/COM/MAGC/JNI/HelloWorld.java
/ ** * */ package com.magc.jni ؛ / ** * Author magc * */ public class helloWorld {static {system.loadLibrary ("hello") ؛ } public native void displayhello () ؛ / ** * param args */ public static void main (string [] args) {new HelloWorld (). displayHello () ؛ }} أدخل دليل SRC وتجميع فئة Java.
Command: Javac ./com/magc/jni/helloworld.java
توليد HelloWorld.class في الدليل حيث يوجد HelloWorld.java
ثم استخدم Javah لإنشاء ملف الرأس.
القيادة: Javah -jni com.magc.jni.helloworld
قم بإنشاء ملف COM_MAGC_JNI_HELLOYORLD.H في الدليل الحالي. يتم استخدام هذا الملف بواسطة برامج C و C ++ للإشارة وتنفيذ الوظائف فيه.
قائمة البرنامج 2: com_magc_jni_helloworld.h
/ * لا تقم بتحرير هذا الملف - إنه تم إنشاؤه الجهاز */ #include <jni.h>/ * header للفئة com_magc_jni_helloworld */ #ifndef _included_com_magc_jni_helloworld #define _included_magc_jni_helloworld #endif / * * class: com_magc_jni_helloworld * method: displayHello * signature: () v * / jniexport void jnicall java_com_magc_jni_helloworld_displayhello (jnienv * ، Job) ؛ #ifdef __cplusplus} #endif #endif
ملاحظة: 1) لا يتطلب ملف الرأس هذا تجميع المستخدم ويستخدم مباشرة للرجوع إليه برامج C و C ++ الأخرى.
2) طريقة java_com_magc_jni_helloworld_displayhello (Jnienv *، Jobject) في ملف الرأس هذا هو واجهة للتفاعل مع مكتبات الارتباطات الديناميكية في المستقبل ، ويجب أن يكون الاسم متسقًا.
قائمة 3 من البرنامج: src/jni_helloworldimpl.cpp
#include <jni.h> #include "com_magc_jni_helloworld.h" #include <stdio.h> jniexport void jnicall java_com_magc_jni_helloworld_displayhello (jnienv *env ، obj) printf ("Hello World! /N") ؛ يعود؛} يقوم ملف C ++ هذا بتنفيذ الوظائف في ملف الرأس أعلاه ، يرجى ملاحظة أن أسماء وظائف الطريقة يجب أن تكون متسقة.
تجميع وتوليد مكتبة ديناميكية libhello.so ،
الأمر: G ++ -shared -i/usr/lib/jvm/java -6 -openjdk/include jni_helloworldimpl.cpp -o libhello.so
بعد النجاح ، سيتم إنشاء ملف Libhello.so Dynamic Link Library.so في الدليل الحالي.
مع المكتبة الديناميكية للتطبيقات المحددة ، يمكنك تشغيل Java للاتصال بالطريقة الأصلية لفئة برنامج JNI.
الأمر: java -djava.library.path =. com.magc.jni.helloworld
نتيجة الإدخال هي: من jni_helloworldimpl.cpp: Hello World!
شكرا لك على القراءة ، آمل أن تساعدك. شكرا لك على دعمك لهذا الموقع!