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

Señ*_*Mas 2 c++ java java-native-interface android exception

我对 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!
Run Code Online (Sandbox Code Playgroud)

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

有谁知道如何构造并向 java 抛出一个新的异常实例,该异常接受除 Exception() 的默认字符串之外的参数?只扔一根绳子对我来说毫无价值。

提前致谢!

Hal*_*own 7

您可以使用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);
Run Code Online (Sandbox Code Playgroud)