Heim > Backend-Entwicklung > C++ > Hauptteil

Wie rufe ich Java-Methoden aus C-Anwendungen auf?

Mary-Kate Olsen
Freigeben: 2024-11-17 09:46:04
Original
674 Leute haben es durchsucht

How to Call Java Methods from C   Applications?

Aufrufen von Java-Methoden aus C-Anwendungen

Im Bereich der plattformübergreifenden Entwicklung kann es vorkommen, dass eine C-Anwendung Zugriff auf Funktionalitäten benötigt, die von Java-Methoden bereitgestellt werden. Diese Abfrage untersucht die Machbarkeit und die Nuancen zum Erreichen dieser Integration.

Machbarkeit und Mechanismus

Ja, es ist möglich, Java-Methoden aus C/C-Code heraus aufzurufen. Das Verfahren ist jedoch etwas kompliziert und folgt einem reflektierenden und nicht typsicheren Ansatz.

Die C Application Programming Interface (API) bietet eine sauberere Methode zum Erreichen dieser Integration. Der Ansatz beinhaltet die Instanziierung einer Java Virtual Machine (JVM) innerhalb des C-Codes. In Szenarien, in denen der native Code aus Java aufgerufen wird, ist die Erstellung einer VM-Instanz nicht erforderlich.

Implementierung

Das bereitgestellte Codefragment zeigt, wie Java-Methoden aus einem C aufgerufen werden Anwendung:

#include <jni.h>
#include <stdio.h>

int main() {
    JavaVM *vm;  // Pointer to JVM
    JNIEnv *env;  // JNI interface to interact with JVM
    JavaVMInitArgs vm_args;  // JVM initialization arguments

    // Initialize JVM arguments
    vm_args.version = JNI_VERSION_1_2;
    vm_args.nOptions = 0;
    vm_args.ignoreUnrecognized = 1;

    // Construct a Java Virtual Machine
    jint res = JNI_CreateJavaVM(&vm, (void **)&env, &vm_args);

    // Create a Java string object
    jstring jstr = env->NewStringUTF("Hello World");

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

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

    // Invoke the "toLowerCase()" method on the string object
    jobject result = env->CallObjectMethod(jstr, to_lower);

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

    // Print the converted string
    printf("%s\n", str);

    // Release the C-style string
    env->ReleaseStringUTFChars(jstr, str);

    // Destroy the Java Virtual Machine
    vm->DestroyJavaVM();

    return EXIT_SUCCESS;
}
Nach dem Login kopieren

Plattformübergreifend Kompilierung

Für die plattformübergreifende Kompilierung unter Ubuntu führen Sie den folgenden Befehl aus:

g++ -I/usr/lib/jvm/java-6-sun/include \ 
-I/usr/lib/jvm/java-6-sun/include/linux \ 
-L/usr/lib/jvm/java-6-sun/jre/lib/i386/server/ -ljvm jnitest.cc
Nach dem Login kopieren

Fehlerbehandlung

Es ist von entscheidender Bedeutung Überprüfen Sie die Rückkehrcodes aller verwendeten Methoden für eine ordnungsgemäße Fehlerbehandlung. Beispielsweise prüft das folgende Codefragment beim Abrufen der Zeichenfolge im C-Stil auf mögliche Probleme bei der Speicherzuordnung:

str = env->GetStringUTFChars(jstr, NULL);
if (str == NULL) {
    return EXIT_FAILURE; /* out of memory */
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie rufe ich Java-Methoden aus C-Anwendungen auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage