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

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

我是 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/

相关文章:

C++ Final 或 Sealed

java - 如何解决android中的ResourceType问题?

java - "Can' t 覆盖原因”当使用空原因设置异常原因时

java - 使用 Android 应用程序 (Java) 登录网站

java - 我无法在 ListView 中将文本居中

c++ - 使用Boost::Asio套接字读取500ms

java - 在我的应用程序中启动倒数计时器,它将独立运行我的应用程序打开或关闭

java - 链式线程安全集合线程安全吗?

android - 使用其他 IDE 而不是 Eclipse 开发 Android

c++ - 如何在多映射中将结构累积为值类型?