Prinsip Java JNI
JNI adalah fungsi penting dalam platform standar Java. Itu menebus kekurangan keunggulan penting Java dari platform-independen. Sementara Java adalah cross-platform, ia juga dapat berinteraksi dengan perpustakaan dinamis dari bahasa lain (seperti C dan C ++), memberikan bahasa lain kesempatan untuk memainkan keuntungan mereka.
Dengan dukungan platform Java Standard, mode JNI lebih mudah diimplementasikan dan digunakan. Berikut adalah ringkasan dari grafik pengetahuan berikut:
Contoh:
Deskripsi Lingkungan: Ubuntu 10.4.2 Sistem LTS
Daftar Program 1: SRC/COM/MAGC/JNI/HELLOWORLD.java
/ ** * */ paket com.magc.jni; / ** * @author magc * */ kelas publik helloWorld {static {system.loadlibrary ("hello"); } public asli void displayHello (); / ** * @param args */ public static void main (string [] args) {new HelloWorld (). displayHello (); }} Masukkan direktori SRC dan kompilasi kelas Java.
Perintah: javac ./com/magc/jni/helloworld.java
Menghasilkan helloworld.class di direktori di mana helloworld.java berada
Kemudian gunakan Javah untuk menghasilkan file header.
Perintah: javah -jni com.magc.jni.hellororld
Menghasilkan file header com_magc_jni_helloworld.h di direktori saat ini. File ini digunakan oleh program C dan C ++ untuk merujuk dan mengimplementasikan fungsi di dalamnya.
Daftar Program 2: com_magc_jni_helloworld.h
/ * Jangan mengedit file ini - mesin ini dihasilkan */ #include <jni.h>/ * header untuk kelas com_magc_jni_hellorld */ #ifndef _includeded_com_magc_jni_hellorld #define _includededed_magc_magc_jnli #endif / * * kelas: com_magc_jni_helloworld * Metode: displayhello * tanda tangan: () v * / jniexport void jnicall java_com_magc_jni_helloworld_displayhello (jnienv *, job); #ifdef __cplusplus} #endif #endif
Catatan: 1) File header ini tidak memerlukan kompilasi pengguna dan langsung digunakan untuk referensi oleh program C dan C ++ lainnya.
2) JAVA_COM_MAGC_JNI_Helloworld_displayhello (jnienv *, jobject) Metode dalam file header ini adalah antarmuka untuk berinteraksi dengan pustaka tautan dinamis di masa depan, dan namanya harus konsisten.
Listing 3 dari program: SRC/JNI_HelloworldImpl.cpp
#include <jni.h> #include "com_magc_jni_helloworld.h" #include <stdio.h> jniexport void Jnicall java_com_magc_jni_hellowlld_displayhello (jnienv *envjc.jni_hlowlld_displayhello (jnienv *oM envj) {cetakan (jNienv *{job pl cetakan (jnienv *{job cetakan) {jNiPLL (JNIENV *OBJ) {JRIENDLLD (JNIENV *OBJ) {JOLPLL (jnienv * printf ("Halo dunia! /n"); kembali;} File C ++ ini mengimplementasikan fungsi dalam file header di atas, harap perhatikan bahwa nama fungsi metode harus konsisten.
Mengkompilasi dan menghasilkan perpustakaan dinamis libhello.so,
Perintah: g ++ -hared -i/usr/lib/jvm/java -6 -openjdk/termasuk jni_hellowldimpl.cpp -o libhello.so
Setelah berhasil, file LIBHELLO.SO LIBHELO.SO Dynamic akan dihasilkan di direktori saat ini.
Dengan perpustakaan dinamis implementasi spesifik, Anda dapat menjalankan Java untuk memanggil metode asli kelas program JNI.
Perintah: java -djava.library.path =. com.magc.jni.hellororld
Hasil inputnya adalah: dari jni_helloworldImpl.cpp: halo dunia!
Terima kasih telah membaca, saya harap ini dapat membantu Anda. Terima kasih atas dukungan Anda untuk situs ini!