現在、私のアプリケーションでは、C ++(コア実装)とjava(サービスとプレゼンテーション)を使用しています。現在、C ++コアで例外が発生しています。これは、JNIコードでキャッチし、スロー可能なオブジェクトを作成して、Javaレイヤーにスローしています。さらに処理できるようにします。
jniで例外をキャッチするために、次のコードを使用しています。
catch (namespace::MyException& excep) {
jclass ex = jenv->FindClass("namespace/MyException");
jmethodID constructor;
jthrowable object;
jobject obj;
if (ex)
{
constructor = jenv->GetMethodID(ex, "<init>", "(Ljava/lang/String;Ljava/lang/String;I;I)V");
if(!constructor)
{
SWIG_JavaThrowException(jenv, SWIG_JavaRuntimeException, (char*) excep.what());
return $null;
}
jstring str = jenv->NewStringUTF(excep.what());
jstring str2 = jenv->NewStringUTF(excep.GetStackTraceAsString());
obj = jenv->NewObject(ex, constructor, str, str2,excep.GetCat(),excep.GetCate());
object = static_cast<jthrowable>(obj);
jenv->DeleteLocalRef(str);
jenv->DeleteLocalRef(str2);
jenv->Throw(object);
}
return $null;
}
MyExceptionクラスのC++シグネチャは
MyException(string str1, string str2, int cat1, int cat2);
しかし、私のJniコードでは、MyExceptionCTORのmethodIdを取得できません。
JNIコードで何がうまくいかなかったのか誰か教えてもらえますか?私が疑うのは、GetMethodId()のparameterListに問題があるということです。