หลักการ Java Jni
JNI เป็นฟังก์ชั่นสำคัญในแพลตฟอร์มมาตรฐาน Java มันทำขึ้นสำหรับข้อบกพร่องของข้อได้เปรียบที่สำคัญของ Java ของแพลตฟอร์มที่ไม่ขึ้นกับแพลตฟอร์ม ในขณะที่ Java เป็นข้ามแพลตฟอร์มมันยังสามารถโต้ตอบกับไลบรารีไดนามิกของภาษาอื่น ๆ (เช่น C และ C ++) ให้โอกาสอื่น ๆ ในการเล่นข้อได้เปรียบของพวกเขา
ด้วยการสนับสนุนของแพลตฟอร์มมาตรฐาน Java โหมด JNI นั้นง่ายต่อการใช้งานและใช้งาน นี่คือบทสรุปของกราฟความรู้ต่อไปนี้:
ตัวอย่าง:
คำอธิบายสภาพแวดล้อม: Ubuntu 10.4.2 ระบบ LTS
รายการโปรแกรม 1: SRC/COM/MAGC/JNI/HelloWorld.java
/ ** * */ แพ็คเกจ com.magc.jni; / ** * @author magc * */ คลาสสาธารณะ HelloWorld {คงที่ {System.loadLibrary ("Hello"); } public native void displayhello (); / ** * @param args */ โมฆะคงที่สาธารณะหลัก (สตริง [] args) {new helloWorld (). displayhello (); - ป้อนไดเรกทอรี SRC และรวบรวมคลาส Java
คำสั่ง: javac ./com/magc/jni/helloworld.java
สร้าง helloWorld.class ในไดเรกทอรีที่ HelloWorld.java ตั้งอยู่
จากนั้นใช้ Javah เพื่อสร้างไฟล์ส่วนหัว
คำสั่ง: javah -jni com.magc.jni.helloworld
สร้างไฟล์ส่วนหัว com_magc_jni_helloworld.h ในไดเรกทอรีปัจจุบัน ไฟล์นี้ใช้โดยโปรแกรม C และ C ++ เพื่ออ้างอิงและใช้ฟังก์ชั่นในนั้น
รายการโปรแกรม 2: com_magc_jni_helloworld.h
/ * อย่าแก้ไขไฟล์นี้ - เป็นเครื่องที่สร้างขึ้น */ #include <jni.h>/ * ส่วนหัวสำหรับคลาส com_magc_jni_helloworld */ #ifndef _included_com_magc_jni_hellowlld #define _includeded_com_magc_jni #endif / * * คลาส: com_magc_jni_helloworld * วิธี: displayhello * ลายเซ็น: () v * / jniexport โมฆะ 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 เป็นโมฆะ Jnicall java_com_magc_jni_helloworld_displayhello printf ("Hello World! /n"); กลับ;} ไฟล์ C ++ นี้ใช้ฟังก์ชั่นในไฟล์ส่วนหัวข้างต้นโปรดทราบว่าชื่อฟังก์ชันวิธีการจะต้องสอดคล้องกัน
รวบรวมและสร้างไลบรารีไดนามิก libhello.so
คำสั่ง: g ++ -shared -i/usr/lib/jvm/java -6 -openjdk/รวม jni_helloworldimpl.cpp -o libhello.so
หลังจากประสบความสำเร็จไฟล์ Libhello.so Library Dynamic Link จะถูกสร้างขึ้นในไดเรกทอรีปัจจุบัน
ด้วยไลบรารีแบบไดนามิกของการใช้งานเฉพาะคุณสามารถเรียกใช้ Java เพื่อเรียกใช้วิธีการดั้งเดิมของคลาสโปรแกรม JNI
คำสั่ง: java -djava.library.path = com.magc.jni.helloworld
ผลการป้อนข้อมูลคือ: จาก jni_helloworldimpl.cpp: Hello World!
ขอบคุณสำหรับการอ่านฉันหวังว่ามันจะช่วยคุณได้ ขอบคุณสำหรับการสนับสนุนเว็บไซต์นี้!