首先定义了一个类class device{String strDeviceName;int i;} 然后定义一个本地函数 public native int ListDev(device[]  devList)然后在本地用c实现:JNIEXPORT jint JNICALL Java_com_NDKTSPtest_JniTspTest_Listdev(JNIEnv *e, jobject j, jobjectArray devList){jint dwRet;jobject dev1 = (*e)->GetObjectArrayElement(e, devList, 0);;
     jclass dev = (*e)->GetObjectClass(e, dev1);
        jfieldID strDeviceName = (*e)->GetFieldID(e, dev, "strDeviceName", "Ljava/lang/String;");
        jfieldID iType = (*e)->GetFieldID(e, dev, "iType", "I");
  jstring jstr = (*e)->NewStringUTF(e,DeviceName);
  (*e)->SetObjectField(e, dev1, strDeviceName, jstr);
  (*e)->SetIntField(e, dev1, iType, UK_SDKEYID);
  dwRet =RT_OK;
  (*e)->ReleaseStringUTFChars(e, jstr, DeviceName);return dwRet;}总是有问题 这个取得类数组里面的引用类型对吗?总感觉有点问题 但又不知道问题处在哪儿?

解决方案 »

  1.   

    http://www.blogjava.net/china-qd/archive/2006/04/29/44002.html  jclass dev = (*e)->GetObjectClass(e, dev1); // 这个有问题,应该去获取java中的实例类 jclass objectClass = (env)->FindClass("com/java/ddddd");
      

  2.   

    我的ListDev可是引用类型的数组不是普通类型数组了 可能那么简单的实现实例化对象的获取吗?我是要用本地方法对 ListDev数组中第一个引用类的两个变量赋值的
      

  3.   

    我的ListDev可是引用类型的数组不是普通类型数组了 可能那么简单的实现实例化对象的获取吗?我是要用本地方法对 ListDev数组中第一个引用类的两个变量赋值的
      

  4.   

    jobject dev1 = (*e)->GetObjectArrayElement(e, devList, 0);;
      jclass dev = (*e)->GetObjectClass(e, dev1);
      jfieldID strDeviceName = (*e)->GetFieldID(e, dev, "strDeviceName", "Ljava/lang/String;");
      jfieldID iType = (*e)->GetFieldID(e, dev, "iType", "I");
      jstring jstr = (*e)->NewStringUTF(e,DeviceName);
      (*e)->SetObjectField(e, dev1, strDeviceName, jstr);
      (*e)->SetIntField(e, dev1, iType, UK_SDKEYID);
      dwRet =RT_OK;
      (*e)->ReleaseStringUTFChars(e, jstr, DeviceName);这个顺序没错,先拿到数组对象的,然后从数组对象中获取基本类型的,问题是你的
    jclass dev = (*e)->GetObjectClass(e, dev1); 这个是有问题的。
    这里有资料,可以参考一下。
    http://www.blogjava.net/china-qd/archive/2006/04/29/44002.html