返回本机bytebuffer的Java方法的JNI GetMethodID

时间:2015-07-16 00:03:35

标签: java android opencv java-native-interface

我需要从用Java创建的本地bytebuffer创建一个opencv :: Mat。但是,当我尝试获取返回ByteBuffer的java方法的methodID时,我得到一个段错误。我包括了onMeshGenerated函数,因为我从JNI获取并调用该方法没有任何问题。

Java代码:

public void onMeshGenerated() {
    mOwner.onMeshGenerated();
}

public ByteBuffer getRGBData() {
    return mOwner.getRGBData();
}

JNI代码:

JNIEXPORT void JNICALL Java_com_aquifi_facescan_Scanner3DNativeAPI_Start
  (JNIEnv * env, jobject obj)
{
    jclass cls = env->GetObjectClass(obj);
    javaOnMeshGeneratedMethodRef = env->GetMethodID(cls, "onMeshGenerated", "()V");
    javaOnGetRGBMethodRef = env->GetMethodID(cls, "getRGBData", "()Ljava/nio/ByteBuffer;");
    // Segfault on the line above
  .
  .
  .

}

非常感谢任何建议。

2 个答案:

答案 0 :(得分:1)

感谢您的回复。卸载应用程序后,清理构建版本,然后重新启动Eclipse就可以了。

答案 1 :(得分:0)

要在JNI模块中创建jobject,请使用NewDirectByteBuffer