Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Memanggil Kaedah Java dari Aplikasi C?

Bagaimana untuk Memanggil Kaedah Java dari Aplikasi C?

Mary-Kate Olsen
Lepaskan: 2024-11-17 09:46:04
asal
758 orang telah melayarinya

How to Call Java Methods from C   Applications?

Menggunakan Kaedah Java daripada Aplikasi C

Dalam bidang pembangunan merentas platform, mungkin timbul bahawa aplikasi C memerlukan akses kepada fungsi yang disediakan oleh kaedah Java. Pertanyaan ini meneroka kemungkinan dan nuansa mencapai penyepaduan ini.

Kebolehlaksanaan dan Mekanisme

Ya, adalah mungkin untuk memanggil kaedah Java dari dalam kod C/C. Walau bagaimanapun, prosedurnya agak rumit dan mematuhi pendekatan reflektif dan bukan jenis selamat.

Antara Muka Pengaturcaraan Aplikasi (API) C menyediakan kaedah yang lebih bersih untuk mencapai penyepaduan ini. Pendekatan ini melibatkan penggunaan Mesin Maya Java (JVM) dalam kod C. Dalam senario di mana kod asli digunakan daripada Java, membina tika VM adalah tidak diperlukan.

Pelaksanaan

Coretan kod yang disediakan menunjukkan cara memanggil kaedah Java daripada C aplikasi:

#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;
}
Salin selepas log masuk

Merentas Platform Kompilasi

Untuk kompilasi merentas platform pada Ubuntu, laksanakan arahan berikut:

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
Salin selepas log masuk

Pengendalian Ralat

Adalah penting untuk sahkan kod pemulangan semua kaedah yang digunakan untuk pengendalian ralat yang betul. Sebagai contoh, coretan kod berikut menyemak kemungkinan isu peruntukan memori apabila mendapatkan rentetan gaya C:

str = env->GetStringUTFChars(jstr, NULL);
if (str == NULL) {
    return EXIT_FAILURE; /* out of memory */
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Memanggil Kaedah Java dari Aplikasi C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan