java - 在 JNI 中返回多维数组

标签 java android c++ android-studio java-native-interface

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

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;
}

但显然它不起作用。什么是正确的方法?

最佳答案

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;
}

关于java - 在 JNI 中返回多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43865462/

相关文章:

android - 在 fragment 期间处理后退按钮键

Android 应用程序中的 C# .dll 库

c++ - c++17 map::extract 方法在 macOS 上可用吗?

c++ - 如何在 Windows 中将共享库 *dll 与 CMake 链接

c++ - 使用 Qt 读取 .odf 文件

java - 扫描仪异常 : java. util.InputMismatchException

android - 谷歌地图 v2 上的膨胀错误

java - "Package nameofthepackage does not exist"

java - Maven surefire 找不到 ForkedBooter 类

java - 用java制作一个计算器