2017-05-09 127 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; 
}