如何在jni

时间:2017-02-18 12:55:25

标签: java java-native-interface

我有一个java方法,它从我的native方法调用,并返回一个对象数组到本机代码。

对象数组的元素设置为

  Object[] arr = new Object[10];
    arr[0] = new Integer(12);
    arr[1] = new Float(25.5f);

我在我的本机代码中收到此数组,如下所示,

  jobjectArray a = (jobjectArray)(*env)->CallStaticObjectMethodA(env, <class_id>, <method_id>, <parameter_list>);

我有对象数组中存储的每个元素的数据类型。因此,基于数据类型,如何在我的本机方法中访问相应的整数和浮点值。

我尝试了以下内容,

 jobject obj = (*env)->GetObjectArrayElement(env, a, 0);
    int num = (jint)obj;

但是设置为num的值不正确。

1 个答案:

答案 0 :(得分:2)

当您将Integer转换为int时,Java会自动取消装箱。但是那个机制在C中并不存在。你正在做的是获取元素的内存地址并将其解释为int

如果您希望从intInteger获得C,则必须致电intValue

jobject objInteger = (*env)->GetObjectArrayElement(env, a, 0);    

jclass cInteger = (*env)->FindClass(env, "java/lang/Integer");
jmethodID intValue = (*env)->GetMethodID(env, cInteger, "intValue", "()I");
int i = (*env)->CallIntMethod(env, objInteger, intValue);