当前位置: 首页 > 知识库问答 >
问题:

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

郑浩博
2023-03-14

我是相当新的JNI善良,所以请告诉我,如果我是愚蠢的。

我试图将一个自定义异常从C扔到Java层,该层由字符串和整数构成。我无法让ThrowNew()工作,因为它只需要一个字符串参数。我能找到的每个自定义异常的例子都使用ThrowNew()!!Grrrrr

我猜我需要构造一个,并用“扔(jthrowable obj)”扔出去,但我不确定...这和“扔新()”一样吗??

例如,这就是我需要的:

int myErrorCode = 42;
const char* myErrorString = "stuff broke";

jclass myExceptionClass = env->FindClass("MyException");
env->ThrowNew(myExceptionClass, myErrorString, myErrorCode );//<-- of course this wont work!

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

有人知道如何构造并向java抛出一个新的异常实例,该实例使用的参数不是exception()的默认字符串吗?只扔一根绳子对我来说毫无价值。

提前谢谢!

共有1个答案

陆雅志
2023-03-14

您可以使用env-

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);

 类似资料:
  • 我需要创建一个jpa自定义查询,使用几个表上的联接来获取记录。 以下是我想要达到的目标: 对很少的参数进行数据排序(在运行时决定) 使用where子句进行筛选(在运行时决定) 示例: @query(value=“从用户a中选择a.name,b.city,c.reason在a.id=b.id上连接地址b在a.id=c.id上连接测试c 我无法为其创建常规查询。 任何其他的方法对我来说也是可以接受的来

  • 如何定义具有多个隐式参数的函数。

  • 问题内容: 我有一个源输入 input.txt 我想将这些输入馈入程序,如下所示: 所以我尝试使用 xargs ,但是没有运气。 它给 但我想要 任何的想法? 问题答案: 到目前为止给出的解决方案都无法正确处理包含空格的文件名。如果文件名包含“或”,有些甚至会失败。如果输入文件是由用户生成的,则应该准备好使用令人惊讶的文件名。 GNU Parallel 很好地处理了这些文件名,并为您(至少)提供了

  • 问题内容: 我在将控制器中定义的函数与指令中的回调函数绑定时遇到一些麻烦。我的代码如下所示: 在我的控制器中: 然后我的指令: 在我的html页面中: 上面的代码没有运气。根据我在各种教程中所读的内容,我知道我应该在HTML页面中指定参数? 问题答案: 您的代码中有一个小错误,请尝试以下代码,它应该对您有用

  • 问题内容: 我有一个方法: 由javah C / C ++头生成的此方法是: 如何从jobject(即ByteBuffer实例)获取数据数组? 问题答案: 假设您使用ByteBuffer.allocateDirect()分配了ByteBuffer,则可以使用GetDirectBufferAddress