我对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()的默认字符串以外的参数吗? 只丢一串对我来说毫无价值。
谢谢!
答案 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);