Bolehkah saya memanggil kaedah Java daripada aplikasi C?

Mary-Kate Olsen
Lepaskan: 2024-11-13 00:15:02
asal
880 orang telah melayarinya

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

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

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!

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