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