代码之家  ›  专栏  ›  技术社区  ›  Carlo del Mundo

java JNI——可以从C++中在java中设置一个单独的基元数组元素吗?

  •  7
  • Carlo del Mundo  · 技术社区  · 14 年前

    基本上,我一直在执行以下操作来检索Java实例字段(在本例中为int)并将其设置为如下所示的新值:

    jclass cls = env->GetObjectClass(obj);
    jfieldID fid = env->GetFieldID(cls, "myVariable", "I");
    env->SetIntField(obj, fid, (jint)2012);
    

    jclass cls = env->GetObjectClass(obj);
    jfieldID fid = env->GetFieldID(cls, "myVariableArray", "[I");
    PSUDOCODE: <"SET myVariableArray[0] = 2013" ... Is there a method for this?>
    

    有这样的事吗?

    2 回复  |  直到 14 年前
        1
  •  10
  •   user402642 user402642    14 年前

    我看了15多份文件后找到了答案。

    // Grab Fields
    jclass cls = env->GetObjectClass(obj);
    jfieldID fid = env->GetFieldID(cls, "testField", "[I");
    
    jintArray jary;
    jary = (jintArray)env->GetObjectField(obj, fid);
    jint *body = env->GetIntArrayElements(jary, 0);
    body[0] = 3000;
    env->ReleaseIntArrayElements(jary, body, 0);
    

        2
  •  5
  •   Sdra    6 年前

    如果您只想更改一个或几个值,我强烈建议您使用 SetIntArrayRegion 因为它避免了来回复制整个数组。

    jintArray jMyArray = (jintArray)env->GetObjectField( obj, fid );
    // jMyArray[0] = 2013
    jint elements[] = { 2013 };
    env->SetIntArrayRegion( jMyArray, 0, 1, elements );
    

    this IBM的文章;)