Maison > développement back-end > C++ > le corps du texte

Comment puis-je appeler des méthodes Java à partir d'une application C à l'aide de JNI ?

Patricia Arquette
Libérer: 2024-11-09 14:02:02
original
286 Les gens l'ont consulté

How can I call Java methods from a C   application using JNI?

Appel de méthodes Java à partir d'applications C

En tant que développeur C, vous pouvez rencontrer des scénarios dans lesquels il est nécessaire d'interagir avec le code Java depuis votre application. Ceci peut être réalisé à l'aide de l'interface native Java (JNI), qui fournit un pont entre les environnements d'exécution de code C/C et Java.

Au sein de JNI, les programmes C peuvent charger et exécuter des classes Java et invoquer leurs méthodes. Cependant, le processus nécessite un examen attentif des éléments suivants :

  1. Création d'une machine virtuelle Java (JVM) : Pour combler le fossé entre C et Java, il est nécessaire de créer une instance de la JVM à partir du code C. C'est là que JavaVMInitArgs entre en jeu.
  2. Accès aux classes Java : Une fois que vous disposez d'une instance JVM, vous pouvez utiliser JNI pour rechercher et instancier des classes Java. La méthode FindClass vous aide à localiser la classe Java souhaitée.
  3. Localisation des méthodes Java : Une fois que vous avez l'objet de classe, la méthode GetMethodID vous permet d'identifier la méthode Java que vous souhaitez appeler.
  4. Invocation de méthodes Java : Avec l'ID de méthode en main, vous pouvez appeler la méthode Java à l'aide de la fonction CallObjectMethod de JNI. Cette fonction prend l'objet Java et ses paramètres en entrée.
  5. Récupération des résultats : Après avoir invoqué la méthode Java, vous pouvez utiliser JNI pour récupérer la valeur de retour sous forme de chaîne de style C ou de objet.
  6. Nettoyage : N'oubliez pas de libérer les ressources de manière appropriée. JNI fournit des fonctions comme ReleaseStringUTFChars et DestroyJavaVM à cet effet.

Voici un exemple en C qui montre comment appeler la méthode toLowerCase de la classe Java String :

#include <jni.h>

int main() {
  // Construct a VM
  JavaVM *vm;
  JNIEnv *env;
  JavaVMInitArgs vm_args;
  vm_args.version = JNI_VERSION_1_2;
  int res = JNI_CreateJavaVM(&vm, (void **)&env, &vm_args);

  // Get a String object
  jstring jstr = env->NewStringUTF("Hello World");

  // Find the String class
  jclass clazz = env->FindClass("java/lang/String");

  // Get the toLowerCase method
  jmethodID to_lower = env->GetMethodID(clazz, "toLowerCase", "()Ljava/lang/String;");

  // Call the toLowerCase method
  jobject result = env->CallObjectMethod(jstr, to_lower);

  // Get a C-style string
  const char* str = env->GetStringUTFChars((jstring) result, NULL);

  printf("%s\n", str);

  // Clean up
  env->ReleaseStringUTFChars(jstr, str);
  vm->DestroyJavaVM();
  return 0;
}
Copier après la connexion

Rappelez-vous pour gérer les conditions d'erreur de manière appropriée en vérifiant les codes de retour des méthodes JNI. Cela garantit le fonctionnement robuste de votre application C tout en interagissant avec les méthodes Java.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!