目前在我的应用程序中,我使用的是 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 代码中,我无法获取 MyException CTOR 的 methodId。
谁能告诉我 JNI 代码中可能出了什么问题。我怀疑 GetMethodId() 的参数列表中存在一些问题。