我是 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!
如果我的异常类看起来像 Exception() 并且只接受一个字符串,那么这段代码工作正常。
有谁知道如何构造一个新的异常实例并将其抛出给 java,它采用 Exception() 的默认字符串以外的参数? 只扔一根绳子对我来说毫无值(value)。
提前致谢!
最佳答案
您可以使用 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);
关于java - 具有多个参数的 JNI 自定义异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55013243/