在JNI中,如何为jobjectArray赋值?

时间:2011-07-11 11:40:52

标签: java-native-interface

我有一个用Java初始化的对象数组,如下所示:

Record[] pRecords = new Record[5];
ret = GetRecord(pRecords);

我将此数组传递给JNI,从JNI调用CPP,最后数组将被填充。

JNIEXPORT jint JNICALL Java_GetRecord
  (JNIEnv *jEnv, jobject ObjApp, jobjectArray jRecords)
{
    Record  *pRecords = (Record *)malloc(5*sizeof(Record  ));   

    ret = Get_Record(pRecords); // call to CPP
    if(SUCCESS == ret)
    {
        jclass c = (jEnv)->GetObjectClass(jRecords);
        jfieldID  fid = (jEnv)->GetFieldID(c, "m_session", "I");
        (jEnv)->SetIntField (jRecords, fid, pRecords [0].value);
    }
}

我收到了fid NULL。如何将pRecords[0].value分配给jRecords的第0个数组?

1 个答案:

答案 0 :(得分:2)

jobjectArray 不是指向数组第一个元素的指针。请记住,Java数组本身就是一流的对象。

fid为0,因为您在类中寻找成员m_session,该成员表示Java类Record的数组;当然数组类没有这样的成员。您需要执行FindClass()来获取Record类,然后在那里查找该成员。

然后您继续尝试设置该成员。如果它实际上是Record类的成员,我想你想在循环中设置每个数组元素中该成员的值,是吗?当然不是在阵列本身,正如你想要做的那样。对于每个数组元素,您需要调用适当的方法来获取该数组位置中的对象,然后对该对象进行操作。