C アプリケーションから Java メソッドを呼び出す方法
問題:
は可能ですJava コードで定義された関数を C アプリケーションから呼び出しますか?
答え:
はい、C コードから Java メソッドを呼び出すことは可能ですが、プロセスはやや複雑です。このアプローチはリフレクションを利用し、非タイプセーフな方法で動作します。
実装:
C コードは、Java 仮想マシン (JVM) のインスタンスを次から作成します。 C コード内で。ネイティブ コードが Java から呼び出される場合、VM インスタンスを作成する必要はありません。
C から Java メソッドにアクセスする方法の例を次に示します。
#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; }
コンパイル:
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
注: 適切なエラー管理を実装するには、JNI メソッドからのエラー コードを処理することが重要です。
以上がC アプリケーションから Java メソッドを呼び出すことはできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。