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

Bagaimanakah saya boleh memanggil kaedah Java daripada aplikasi C menggunakan JNI?

Patricia Arquette
Patricia Arquetteasal
2024-11-09 14:02:02299semak imbas

How can I call Java methods from a C   application using JNI?

Memanggil Kaedah Java daripada Aplikasi C

Sebagai pembangun C, anda mungkin menghadapi senario di mana anda perlu berinteraksi dengan kod Java dari dalam aplikasi anda. Ini boleh dicapai menggunakan Antara Muka Asli Java (JNI), yang menyediakan jambatan antara C/C dan persekitaran pelaksanaan kod Java.

Dalam JNI, program C boleh memuatkan dan melaksanakan kelas Java dan menggunakan kaedahnya. Walau bagaimanapun, proses tersebut memerlukan pertimbangan yang teliti terhadap perkara berikut:

  1. Membina Mesin Maya Java (JVM): Untuk merapatkan jurang antara C dan Java, anda perlu membuat contoh daripada JVM dari dalam kod C. Di sinilah JavaVMInitArgs berperanan.
  2. Mengakses Kelas Java: Setelah anda mempunyai tika JVM, anda boleh menggunakan JNI untuk mencari dan membuat contoh kelas Java. Kaedah FindClass membantu anda mencari kelas Java yang dikehendaki.
  3. Mencari Kaedah Java: Sebaik sahaja anda mempunyai objek kelas, kaedah GetMethodID membolehkan anda mengenal pasti kaedah Java yang anda ingin gunakan.
  4. Memanggil Kaedah Java: Dengan ID kaedah di tangan, anda boleh memanggil kaedah Java menggunakan fungsi CallObjectMethod JNI. Fungsi ini mengambil objek Java dan parameternya sebagai input.
  5. Mendapatkan Keputusan: Selepas menggunakan kaedah Java, anda boleh menggunakan JNI untuk mendapatkan kembali nilai sebagai rentetan gaya C atau objek.
  6. Membersihkan: Ingat untuk mengeluarkan sumber dengan sewajarnya. JNI menyediakan fungsi seperti ReleaseStringUTFChars dan DestroyJavaVM untuk tujuan ini.

Berikut ialah contoh dalam C yang menunjukkan cara memanggil kaedah toLowerCase kelas Java String:

#include <jni.h>

int main() {
  // Construct a VM
  JavaVM *vm;
  JNIEnv *env;
  JavaVMInitArgs vm_args;
  vm_args.version = JNI_VERSION_1_2;
  int res = JNI_CreateJavaVM(&vm, (void **)&env, &vm_args);

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

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

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

  // Call the toLowerCase method
  jobject result = env->CallObjectMethod(jstr, to_lower);

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

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

  // Clean up
  env->ReleaseStringUTFChars(jstr, str);
  vm->DestroyJavaVM();
  return 0;
}

Ingat untuk mengendalikan keadaan ralat dengan sewajarnya dengan menyemak kod pemulangan daripada kaedah JNI. Ini memastikan operasi teguh aplikasi C anda semasa berinteraksi dengan kaedah Java.

Atas ialah kandungan terperinci Bagaimanakah saya boleh memanggil kaedah Java daripada aplikasi C menggunakan JNI?. 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