Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah saya boleh memanggil kaedah Java daripada aplikasi C?

Bagaimanakah saya boleh memanggil kaedah Java daripada aplikasi C?

Barbara Streisand
Barbara Streisandasal
2024-11-10 09:47:02259semak imbas

How can I call Java methods from C   applications?

Mengantaramuka Java dan C : Memanggil Kaedah Java dari C

Keupayaan untuk memanggil fungsi Java dari dalam aplikasi C memang mungkin tetapi memerlukan pendekatan yang agak rumit. Mekanisme reflektif dan bukan jenis selamat ini melibatkan penciptaan tika Java Virtual Machine (JVM) daripada kod C.

Mencipta Instance JVM

Coretan kod di bawah menunjukkan cara untuk menyediakan tika JVM:

JavaVM *vm;
JNIEnv *env;
JavaVMInitArgs vm_args;
vm_args.version = JNI_VERSION_1_2;
vm_args.nOptions = 0;
vm_args.ignoreUnrecognized = 1;

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

Berinteraksi dengan Objek Java

Setelah tika JVM dibuat, anda boleh berinteraksi dengan objek Java. Berikut ialah contoh mencipta objek Java String:

jstring jstr = env->NewStringUTF("Hello World");

Mengakses Kaedah Java

Untuk mengakses kaedah Java, anda perlu mendapatkan kelas yang mengandungi kaedah:

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

Kemudian, dapatkan ID kaedah:

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

Memanggil Kaedah Java

Akhir sekali, panggil kaedah pada objek:

jobject result = env->CallObjectMethod(jstr, to_lower);

Kompilasi

Di Ubuntu, susun kod menggunakan:

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

Kesimpulan

Pendekatan ini membolehkan anda mengakses kaedah Java daripada aplikasi C, membolehkan kesalingoperasian antara kedua-dua bahasa. Walau bagaimanapun, adalah penting untuk melaksanakan pengendalian ralat yang betul untuk keteguhan.

Atas ialah kandungan terperinci Bagaimanakah saya boleh memanggil kaedah Java daripada aplikasi C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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