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

JNI custom exceptions with more than one parameter

我是 JNI 的新手所以请告诉我我是否愚蠢。

我正在尝试从 C++ 向 Java 层抛出自定义异常,该异常由字符串和整数构成。 我无法让 ThrowNew() 工作,因为它只需要一个字符串参数。我能找到的每个自定义异常示例都使用 ThrowNew()!!呜呜呜

我猜我需要用 "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!

如果我的异常 class 看起来像 Exception() 并且只接受一个字符串,那么这段代码工作正常。

有谁知道如何构建异常的新实例并将其抛出给 java,它采用 Exception() 的默认字符串以外的参数? 只扔一根绳子对我来说毫无价值。

提前致谢!

您可以使用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);