具有多个参数的JNI自定义异常

时间:2019-03-05 23:29:41

标签: java android c++ exception java-native-interface

我对JNI天才还很陌生,所以请告诉我我是否很愚蠢。

我正在尝试将自定义异常从C ++抛出到同时使用字符串和整数构造的Java层。 我不能让ThrowNew()工作,因为它只需要一个字符串参数。我可以找到的每个自定义异常示例都使用ThrowNew()! Grrrrrr

我猜我需要构造一个并用“ Throw(jthrowable obj)”将其抛出,但是我不确定..是否与“ ThrowNew()”相同??

例如,这就是我所需要的:

int myErrorCode = 42;
const char* myErrorString = "stuff broke";

jclass myExceptionClass = env->FindClass("MyException");
env->ThrowNew(myExceptionClass, myErrorString, myErrorCode );//<-- of course this wont work!

如果我的异常类看起来像Exception()并且仅接受一个String,则此代码可以正常工作。

有人知道如何构造并抛出一个新的Java异常实例,该实例采用Exception()的默认字符串以外的参数吗? 只丢一串对我来说毫无价值。

谢谢!

1 个答案:

答案 0 :(得分:3)

您可以使用env->Throw抛出您手动创建的实例:

jclass myExceptionClass = env->FindClass("MyException");
jstring myErrorJString = env->NewStringUTF(myErrorString);
jmethodID ctorMethod = env->GetMethodID(myExceptionClass, "<init>", "(Ljava/lang/String;I)V");
jobject myExceptionObject = env->NewObject(myExceptionClass, ctorMethod, myErrorJString, myErrorCode);
env->Throw(myExceptionObject);