Principio de Java Jni
JNI es una función importante en la plataforma estándar Java. Presenta las deficiencias de la importante ventaja de Java de independiente de la plataforma. Si bien Java es multiplataforma, también puede interactuar con bibliotecas dinámicas de otros idiomas (como C y C ++), lo que le da a otros idiomas la oportunidad de seguir sus ventajas.
Con el soporte de la plataforma estándar Java, el modo JNI es más fácil de implementar y usar. Aquí hay un resumen del siguiente gráfico de conocimiento:
Ejemplo:
Descripción del entorno: Sistema Ubuntu 10.4.2 LTS
Listado de programas 1: Src/com/MAGC/JNI/Helloworld.java
/ ** * */ paquete com.magc.jni; / ** * @Author MAGC * */ public class HelloWorld {static {System.LoadLibrary ("Hello"); } public nation nation void displayHello (); / ** * @param args */ public static void main (string [] args) {new HelloWorld (). DisplayHello (); }} Ingrese el directorio SRC y compile la clase Java.
Comando: Javac ./com/magc/jni/helloworld.java
Generar helloworld.class en el directorio donde se encuentra helloworld.java
Luego use Javah para generar el archivo de encabezado.
Comando: Javah -jni com.magc.jni.helloworld
Genere el archivo de encabezado COM_MAGC_JNI_Helloworld.h en el directorio actual. Este archivo es utilizado por los programas C y C ++ para hacer referencia e implementar funciones en él.
Listado de programas 2: com_magc_jni_helloworld.h
/ * No edite este archivo: se genera la máquina */ #include <jni.h>/ * encabezado para la clase com_magc_jni_helloworld */ #ifndef _included_com_magc_jni_helloworld #define _incLuded_com_magc_jni_helloworld #ifdef #cplusplapla #endif / * * class: com_magc_jni_helloworld * Método: Displayhello * firma: () v * / jniexport void jnicall java_com_magc_jni_helloworld_displayhello (jnienv *, trabajo); #ifdef __cplusplus} #endif #endif
Nota: 1) Este archivo de encabezado no requiere la compilación del usuario y es utilizado directamente para referencia por otros programas C y C ++.
2) El método java_com_magc_jni_helloworld_displayhello (jnienv *, jobject) en este archivo de encabezado es una interfaz para interactuar con bibliotecas de enlaces dinámicos en el futuro, y el nombre debe ser consistente.
Listado 3 del programa: 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 *ent, trabajo obj) {printf ("de jni_hellowlorld. printf ("¡Hola mundo! /N"); devolver;} Este archivo C ++ implementa las funciones en el archivo de encabezado anterior, tenga en cuenta que los nombres de las funciones del método deben ser consistentes.
Compilar y generar biblioteca dinámica libhello.so,
Comando: G ++ -shared -i/usr/lib/jvm/java -6 -openjdk/Incluya jni_helloworldimppl.cpp -o libhello.so
Después del éxito, la biblioteca dinámica de enlaces libhello.so se generará en el directorio actual.
Con la biblioteca dinámica de implementaciones específicas, puede ejecutar Java para llamar al método nativo de la clase del programa JNI.
Comando: java -djava.library.path =. com.magc.jni.helloworld
El resultado de la entrada es: de jni_helloworldimpl.cpp: ¡Hola mundo!
Gracias por leer, espero que pueda ayudarte. ¡Gracias por su apoyo para este sitio!