2017-05-09 99 views
0

我想从C++到Java代码返回一个已经存在的多维数组。我的代码如下:在JNI中返回多维数组

int cells [3][3] = {{0}}; 

int[][] 
Java_com_packagename_appname_GameView_addNew(
     JNIEnv *env, 
     jobject, int row, int col, int val) { 
    cells[row][col] = val; 
    return cells; 
} 

但显然这是行不通的。什么是正确的方式?

+0

也许检查的[返回2D基本数组](更一般的问题http://stackoverflow.com/questions/6143134/return-a-2d-primitive-array-from-c-to-java- from-jni-ndk) –

+0

答案很混乱。我认为它不应该那么复杂和冗长。 – Nafis

+0

但是你尝试过吗?不管你喜不喜欢,JNI往往是冗长的,所有的事情都认为代码不是那么大。 – zenzelezz

回答

1
int cells [3][3] = {{0}}; 

jobjectArray 
Java_com_packagename_appname_GameView_addNew(
     JNIEnv *env, 
     jobject, int row, int col, int val) { 

    cells[row][col] = val; 

    // Get the int array class 
    jclass cls = env->FindClass("[I"); 

    jintArray iniVal = env->NewIntArray(3); 
    // Create the returnable jobjectArray with an initial value 
    jobjectArray outer = env->NewObjectArray(3,cls, iniVal); 

    for (int i = 0; i < 3; i++) 
    { 
     jintArray inner = env->NewIntArray(3); 
     env->SetIntArrayRegion(inner, 0, 3, cells[i]); 
     // set inner's values 
     env->SetObjectArrayElement(outer, i, inner); 
     env->DeleteLocalRef(inner); 
    } 
    return outer; 
}