pdf_ppt 2016-10-13 02:33 采纳率: 0%
浏览 1827

JNI传递对象数组问题!!

jclass clsList = env->FindClass("java/util/ArrayList");
jclass clsCruiseInfo = env->FindClass("com/uniview/netsdk/Bean/CruiseInfoBean");
jclass clsCruisePoint = env->FindClass("com/uniview/netsdk/Bean/CruisePointBean");
jmethodID mtdListInit = env->GetMethodID(clsList, "", "()V");
jmethodID mtdListAdd = env->GetMethodID(clsList, "add", "(Ljava/lang/Object;)Z");
jmethodID mtdCuriseInit = env->GetMethodID(clsCruiseInfo, "", "()V");
jmethodID mtdCuriseID = env->GetMethodID(clsCruiseInfo, "setDwCuriseID", "(I)V");
jmethodID mtdCuriseName = env->GetMethodID(clsCruiseInfo, "setSzCuriseName", "(Ljava/lang/String;)V");
jmethodID mtdSize = env->GetMethodID(clsCruiseInfo, "setDwSize", "(I)V");
jmethodID mtdCruisePoint = env->GetMethodID(clsCruiseInfo, "setAstCruisePoint", "([Lcom/uniview/netsdk/Bean/CruisePointBean;)V");
jmethodID mtdCruisePointInit = env->GetMethodID(clsCruisePoint, "", "()V");
jmethodID mtdPresetID = env->GetMethodID(clsCruisePoint, "setDwPresetID", "(I)V");
jmethodID mtdStayTime = env->GetMethodID(clsCruisePoint, "setDwStayTime", "(I)V");
jmethodID mtdSpeed = env->GetMethodID(clsCruisePoint, "setDwSpeed", "(I)V");
jmethodID mtdReserve = env->GetMethodID(clsCruisePoint, "setDwReserve", "(I)V");
jsize len1 = stCuriseList.dwSize;
for(int i = 0; i < len1; i++)

{
jobject objCruiseInfo = env->NewObject(clsCruiseInfo, mtdCuriseInit, "");
env->CallVoidMethod(objCruiseInfo, mtdCuriseID, (jint)stCuriseList.astCruiseInfo[i].dwCuriseID);
env->CallVoidMethod(objCruiseInfo, mtdCuriseName, env->NewStringUTF(stCuriseList.astCruiseInfo[i].szCuriseName));
env->CallVoidMethod(objCruiseInfo, mtdSize, (jint)stCuriseList.astCruiseInfo[i].dwSize);
jsize len2 = stCuriseList.astCruiseInfo[i].dwSize;
printf("1\n");
jobject arrayCount = env->AllocObject(clsCruiseInfo);

for(int k = 0; k < len2; k++)

{
jobject objobjCruisePoint = env->NewObject(clsCruisePoint, mtdCruisePointInit, "");
env->CallVoidMethod(objobjCruisePoint, mtdPresetID, (jint)stCuriseList.astCruiseInfo[i].astCruisePoint[k].dwPresetID);
env->CallVoidMethod(objobjCruisePoint, mtdStayTime, (jint)stCuriseList.astCruiseInfo[i].astCruisePoint[k].dwStayTime);
env->CallVoidMethod(objobjCruisePoint, mtdSpeed, (jint)stCuriseList.astCruiseInfo[i].astCruisePoint[k].dwSpeed);
env->CallVoidMethod(objobjCruisePoint, mtdReserve, (jint)stCuriseList.astCruiseInfo[i].astCruisePoint[k].dwReserve);
env->CallBooleanMethod(arrayCount, mtdListAdd, objobjCruisePoint);
}

        env->CallObjectMethod(objCruiseInfo, mtdCruisePoint, arrayCount);

        env->CallBooleanMethod(pstCruiseList, mtdListAdd, objCruiseInfo);

在倒数第二行报错,请大神解答!

  • 写回答

4条回答 默认 最新

  • pdf_ppt 2016-10-13 02:35
    关注

    先前代码有点乱 重贴一份

     jclass clsList = env->FindClass("java/util/ArrayList");
            jclass clsCruiseInfo = env->FindClass("com/uniview/netsdk/Bean/CruiseInfoBean");
            jclass clsCruisePoint = env->FindClass("com/uniview/netsdk/Bean/CruisePointBean");
            jmethodID mtdListInit = env->GetMethodID(clsList, "<init>", "()V");
            jmethodID mtdListAdd = env->GetMethodID(clsList, "add", "(Ljava/lang/Object;)Z");
            jmethodID mtdCuriseInit = env->GetMethodID(clsCruiseInfo, "<init>", "()V");
            jmethodID mtdCuriseID = env->GetMethodID(clsCruiseInfo, "setDwCuriseID", "(I)V");
            jmethodID mtdCuriseName = env->GetMethodID(clsCruiseInfo, "setSzCuriseName", "(Ljava/lang/String;)V");
            jmethodID mtdSize = env->GetMethodID(clsCruiseInfo, "setDwSize", "(I)V");
            jmethodID mtdCruisePoint = env->GetMethodID(clsCruiseInfo, "setAstCruisePoint", "([Lcom/uniview/netsdk/Bean/CruisePointBean;)V");
            jmethodID mtdCruisePointInit = env->GetMethodID(clsCruisePoint, "<init>", "()V");
            jmethodID mtdPresetID = env->GetMethodID(clsCruisePoint, "setDwPresetID", "(I)V");
            jmethodID mtdStayTime = env->GetMethodID(clsCruisePoint, "setDwStayTime", "(I)V");
            jmethodID mtdSpeed = env->GetMethodID(clsCruisePoint, "setDwSpeed", "(I)V");
            jmethodID mtdReserve = env->GetMethodID(clsCruisePoint, "setDwReserve", "(I)V");
            jsize len1 = stCuriseList.dwSize;
            for(int i = 0; i < len1; i++)  
            {
                jobject objCruiseInfo = env->NewObject(clsCruiseInfo, mtdCuriseInit, "");
                env->CallVoidMethod(objCruiseInfo, mtdCuriseID, (jint)stCuriseList.astCruiseInfo[i].dwCuriseID);
                env->CallVoidMethod(objCruiseInfo, mtdCuriseName, env->NewStringUTF(stCuriseList.astCruiseInfo[i].szCuriseName));
                env->CallVoidMethod(objCruiseInfo, mtdSize, (jint)stCuriseList.astCruiseInfo[i].dwSize);
                jsize len2 = stCuriseList.astCruiseInfo[i].dwSize;
                printf("1\n");
                jobject arrayCount = env->AllocObject(clsCruiseInfo);  
                for(int k = 0; k < len2; k++)  
                {
                    jobject objobjCruisePoint = env->NewObject(clsCruisePoint, mtdCruisePointInit, "");
                    env->CallVoidMethod(objobjCruisePoint, mtdPresetID, (jint)stCuriseList.astCruiseInfo[i].astCruisePoint[k].dwPresetID);
                    env->CallVoidMethod(objobjCruisePoint, mtdStayTime, (jint)stCuriseList.astCruiseInfo[i].astCruisePoint[k].dwStayTime);
                    env->CallVoidMethod(objobjCruisePoint, mtdSpeed, (jint)stCuriseList.astCruiseInfo[i].astCruisePoint[k].dwSpeed);
                    env->CallVoidMethod(objobjCruisePoint, mtdReserve, (jint)stCuriseList.astCruiseInfo[i].astCruisePoint[k].dwReserve);
                    env->CallBooleanMethod(arrayCount, mtdListAdd, objobjCruisePoint);
                }
                env->CallObjectMethod(objCruiseInfo, mtdCruisePoint, arrayCount);
                env->CallBooleanMethod(pstCruiseList, mtdListAdd, objCruiseInfo);
    
    评论

报告相同问题?