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

Bolehkah saya memanggil kaedah Java daripada aplikasi C?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-13 00:15:02914semak imbas

Can I call Java methods from a C   application?

Cara Memanggil Kaedah Java daripada Aplikasi C

Masalah:

Adalah mungkin untuk gunakan fungsi yang ditakrifkan dalam kod Java daripada C aplikasi?

Jawapan:

Ya, adalah mungkin untuk memanggil kaedah Java daripada kod C, tetapi prosesnya agak rumit. Pendekatan ini menggunakan refleksi dan beroperasi dalam cara yang tidak selamat jenis.

Pelaksanaan:

Kod C mencipta contoh Mesin Maya Java (JVM) daripada dalam kod C. Jika kod asli digunakan daripada Java, mencipta tika VM adalah tidak diperlukan.

Berikut ialah contoh cara untuk mengakses kaedah Java daripada C :

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

int main(int argc, char** argv) {
    JavaVM *vm;
    JNIEnv *env;
    JavaVMInitArgs vm_args;
    vm_args.version = JNI_VERSION_1_2;
    vm_args.nOptions = 0;
    vm_args.ignoreUnrecognized = 1;

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

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

    // Get the class containing the method to be invoked
    jclass clazz = env->FindClass("java/lang/String");

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

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

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

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

    // Clean up
    env->ReleaseStringUTFChars(jstr, str);

    // Destroy the JVM
    vm->DestroyJavaVM();

    return 0;
}

Kompilasi:

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

Nota: Adalah penting untuk menangani ralat kod daripada kaedah JNI untuk melaksanakan pengurusan ralat yang betul.

Atas ialah kandungan terperinci Bolehkah saya 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