6

JNI を使用して C++ コードから Java 呼び出しを行う際に問題に直面しています。jobject を取得できますが、jobject での API の呼び出しが失敗します。ほぼ 1 日掘り下げて、他の動作中の Java API (コードで呼び出す jobjects) と比較すると、1 つの違いが見つかりました。

次のコード

void printClassInfo(JNIEnv* env, jobject object, jclass klazz)
{
    printf("printclass info 1\n");
    printf("printclass info 2\n");

    // First get the class object
    jmethodID mid = env->GetMethodID(klazz, "getClass", "()Ljava/lang/Class;");
    printf("printclass info 2.1\n");
    jobject clsObj = env->CallObjectMethod(object, mid);
    printf("printclass info 3\n");
    if(clsObj == NULL){
        printf("cls obj is null");
    }
}

問題が発生しているジョブジェクトの cls obj が null であると表示されます。

他のジョブジェクトの場合、呼び出しは null を返しません。

主な違いは、新しく追加されたクラスであり、この問題を引き起こす可能性のある何かを見落としていたようです。何度も再確認しましたが、明確な指標は得られませんでした。

どんな助けでも感謝します。

4

2 に答える 2

14

あなたはobjectすでに持っています。なぜそのクラスが必要なのですか(申し訳ありませんklass)?JNI には nic 関数がありますGetObjectClass(jobject)。これがあなたができることです:

void printClassInfo(JNIEnv* env, jobject object) {

   jclass clsObj = env->GetObjectClass(env, object);
   if (clsObj == NULL) {
    printf("cls obj is null");
   }
}

これで問題は解決しますか?

于 2014-03-20T16:30:06.867 に答える