我已经谷歌了一下,并没有真正找到一个很好的答案我的问题:从本机jni代码传递错误信息到java的习惯方法是什么?
我通常会选择一个设计并继续使用它,但是这个代码每5毫秒(大约)被调用一次,所以我想我会问是否有一种习惯性的“干净/高效”的方法来做到这一点。 / p>
我看到它的方式,我有四个明显的选择:
在每次调用时,在java中创建一个“错误返回”对象并将其传递给JNI。如果出现问题,本机代码将填写此对象中的错误描述,并且java代码会在返回时检查它。由于错误不是常见情况,因此会为GC创建大量对象以进行清理,其中99.99%是不必要的。
与#1类似,在java类中创建一些单个“错误返回”对象,该对象一遍又一遍地传递给每个方法调用。在每次返回的java代码中检查它是否有错误。这对我来说似乎很狡猾,但也许这是正确的选择?
在本机代码中创建一个对象,其中包含错误的描述(如果适用),并将其作为返回值传递给java。在java中调用之后,检查返回null。这似乎比#1少浪费,但似乎有点尴尬。
只需在jni方法上构建一个整数返回值,并传回一个对应于本机代码“exit”值的int。枚举java映射中的所有可能的本机退出状态。将返回值与“0”进行比较,并在必要时在此映射中查找错误。这似乎比其他更有效,但似乎更笨拙,因为本机代码的更改将需要有人返回并更新“错误表”。
谢谢!
答案 0 :(得分:4)
答案 1 :(得分:1)
关于您注意到的方法:
当然,如果 需要您的返回值,并且您想了解有关实际错误的更详细信息,则应使用exceptions。