Principe Java JNI
JNI est une fonction importante dans la plate-forme standard Java. Il compense les lacunes de l'important avantage de Java à l'indépendance de la plate-forme. Bien que Java soit multiplateforme, il peut également interagir avec des bibliothèques dynamiques d'autres langues (telles que C et C ++), donnant à d'autres langues la possibilité de jouer leurs avantages.
Avec la prise en charge de la plate-forme standard Java, le mode JNI est plus facile à implémenter et à utiliser. Voici un résumé du graphique de connaissances suivant:
Exemple:
Description de l'environnement: Système Ubuntu 10.4.2 LTS
Listing de programme 1: SRC / COM / MAGC / JNI / HELLOWORLD.java
/ ** * * / package com.magc.jni; / ** * @author MAGC * * / public class helloworld {static {System.LoadLibrary ("Hello"); } public natif void displayhello (); / ** * @param args * / public static void main (String [] args) {new Helloworld (). DisplayHello (); }} Entrez le répertoire SRC et compilez la classe Java.
Commande: Javac ./com/magc/jni/Helloworld.java
Générer helloworld.class dans le répertoire où se trouve Helloworld.java
Utilisez ensuite Javah pour générer le fichier d'en-tête.
Commande: Javah -jni com.magc.jni.heloworld
Générez le fichier d'en-tête Com_MAGC_JNI_HELLOWLORLD.H dans le répertoire actuel. Ce fichier est utilisé par les programmes C et C ++ pour référencer et implémenter des fonctions.
Listing de programme 2: com_magc_jni_helowlorld.h
/ * Ne modifiez pas ce fichier - il est généré à la machine * / #include <jni.h> / * En-tête pour la classe com_magc_jni_helowlorld * / #ifndef _included_com_magc_jni_helloworld #define _included_comb_magc_jni_helloworld #IfDef __cplusf / * * Classe: com_magc_jni_helowlorld * Méthode: DisplayHello * Signature: () v * / jniexport void jnicall java_com_magc_jni_helowlorld_displayhello (jniienv *, job); #ifdef __cplusplus} #endif #endif
Remarque: 1) Ce fichier d'en-tête ne nécessite pas de compilation d'utilisateurs et est directement utilisé pour référence par d'autres programmes C et C ++.
2) Le java_com_magc_jni_heloworld_displayhello (jnienv *, jobject) dans ce fichier d'en-tête est une interface pour interagir avec les bibliothèques de liens dynamiques à l'avenir, et le nom doit être cohérent.
Listing 3 du programme: SRC / JNI_HELLOWLORLDIMPL.CPP
#include <jni.h> #include "com_magc_jni_helowlorld.h" #include <stdio.h> jniexport void jnicall java_com_com_magc_jni_helowlorld_displayhello (jnienv * env, job) {printf ("de jni_helloworlord * env,");); printf ("Hello World! / N"); retour;} Ce fichier C ++ implémente les fonctions dans le fichier d'en-tête ci-dessus, veuillez noter que les noms de fonction de méthode doivent être cohérents.
Compiler et générer une bibliothèque dynamique libhello.o,
Commande: G ++ -Shared -i / usr / lib / jvm / java-6-openjdk / include jni_helloworldimpl.cpp -o libhello.so
Après succès, la bibliothèque de liens dynamiques libhello.so sera générée dans le répertoire actuel.
Avec la bibliothèque dynamique d'implémentations spécifiques, vous pouvez exécuter Java pour appeler la méthode native de la classe de programme JNI.
Commande: java -djava.library.path =. com.magc.jni.heloworld
Le résultat d'entrée est: de Jni_HelloworldIMPL.cpp: bonjour le monde!
Merci d'avoir lu, j'espère que cela peut vous aider. Merci pour votre soutien à ce site!