jclass stringArrCls=env->FindClass("[Ljava/lang/String;");  
jobjectArray allpolygonfields = env->NewObjectArray(8000, stringArrCls, NULL);
    jobjectArray  alllinefields = env->NewObjectArray(8000, stringArrCls, NULL);
由于不定大小 所以起先要声明很大 。这种情况下有没有办法转成全局变量或者其他?

解决方案 »

  1.   

    可以销毁的呀!
    DeleteLocalRef
      

  2.   


    jobjectArray outarray =
    (*env)->NewObjectArray(env, count, class_info, NULL);
    //输出数据
    for (i = 0; i < count; i++) {
    jobject obj_info = (*env)->NewObject(env, class_info, construct_method);
    jstring info_name = (*env)->NewStringUTF(env, tempInfo[i].name);
    jstring info_no = (*env)->NewStringUTF(env, tempInfo[i].no);
    jstring info_html = (*env)->NewStringUTF(env,
    tempInfo[i].b ? tempInfo[i].html : tempInfo[i].html_);
    (*env)->SetIntField(env, obj_info, fid_id, tempInfo[i].cid);
    (*env)->SetObjectField(env, obj_info, fid_name, info_name);
    (*env)->SetObjectField(env, obj_info, fid_no, info_no);
    (*env)->SetObjectField(env, obj_info,
    tempInfo[i].b ? fid_html : fid_html_, info_html);
    (*env)->SetIntField(env, obj_info, fid_cid, tempInfo[i].id);
    (*env)->SetIntField(env, obj_info, fid_weight, tempInfo[i].weight);
    (*env)->SetObjectArrayElement(env, outarray, i, obj_info);
    //手动销毁全部临时变量
    (*env)->DeleteLocalRef(env, obj_info);
    (*env)->DeleteLocalRef(env, info_name);
    (*env)->DeleteLocalRef(env, info_no);
    (*env)->DeleteLocalRef(env, info_html);
    }
    (*env)->DeleteLocalRef(env, class_info);
    (*env)->DeleteLocalRef(env, outarray);
    这是我一个项目中的部分源码,给你参考!
      

  3.   

    中间的局部变量我都销毁了,可是象您例子中的 outarray那样的返回值我要声明的很大,那种的不能销毁的,要怎样解决呢?还有你您有没有遇到过
    10-09 09:42:07.413: INFO/DEBUG(1137): signal 11 (SIGSEGV), fault addr 0000000c
    这样子的错误 ?
      

  4.   

    请问您用没用过全局变量,比如说把outarray声明成全局变量