GetFloatArrayElements得到错误的结果

时间:2019-07-12 04:30:19

标签: c++ java-native-interface

我已经从互联网上搜索了解决方案,而我的代码与其他解决方案一样。我认为GetFloatArrayElements用于获取数组元素。

这是我的代码:

JNIEXPORT void JNICALL
    Java_draw(JNIEnv *env, jfloatArray point){
        float temp[6];
        float x = 0;

        jfloat *body = env->GetFloatArrayElements(point, 0);

        for(int i =0; i < 6 ; i++){
            temp[i] = body[i];
            x+= body[i];
            __android_log_print(ANDROID_LOG_ERROR, "TRACKERS123", "[%f]", *(body + i) );
        }

        env->ReleaseFloatArrayElements(point, body, 0);
    }

结果总是这样:

[21.774231]
[0.000000]
[21.707932]
[21.776413]
[0.000000]
[0.000000]

我已经从调试检查了调用代码。这是示例值:

debug

1 个答案:

答案 0 :(得分:1)

您的Java_draw方法的签名是错误的:(source)

  • 第一个参数始终是JNIEnv*
  • 第二个参数取决于方法是静态的还是非静态的:
    • 如果为静态,则第二个参数为jclass
    • 如果是非静态的,则第二个参数是代表对象实例的jobject
  • 第三个参数是您的float[]

因此签名应为:

JNIEXPORT void JNICALL Java_draw(JNIEnv *env, jclass klass, jfloatArray point) // static

JNIEXPORT void JNICALL Java_draw(JNIEnv *env, jobject obj, jfloatArray point) // non-static