JNI将null参数传递给Java方法

时间:2013-12-29 21:57:37

标签: java c++ java-native-interface

修改

我终于发现问题是由于null值毕竟不是null,因为其中一个构造函数没有将值初始化为零。有了这些知识,我想将我的问题改为以下内容:

如果参数应该为null,那么通过JNI将NULL / 0 / nullptr传递给Java方法是否安全?

到目前为止我发现的源代码结果不一致 - 有些人说使用JNI时,C中的NULL和Java中的null是相同的。有些,就像在remudada的答案中所链接的那样,表明它可能不完全正确。

旧问题

使用JNI时,是否可以使用null参数调用Java方法?

我尝试传递null(0,NULL或nullptr),但这会导致Segmentation错误。我还尝试使用null参数NewGlobalRef,但只返回null。

假设以下Java代码:

class Main {
  public void javaFoo(Object o) {
    ...
  }
}

从C ++调用此方法将类似于:

env->CallVoidMethod(object, javaFooID, value);

如果我希望value为空,我该怎么做?

问题是我不能轻易避免传递null对象。有各种具有多个参数的setter,这些参数可能为null,也可能不为null,其中null为无效值:

public void setFoo(Object a, Object b, Object c, Object d) {
  ... // any parameter can be null
}

1 个答案:

答案 0 :(得分:0)