我需要从Java中创建的本机字节缓冲区创建一个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
.
.
.
}
谢谢你们的回复。在卸载应用程序、清理构建并重新启动Eclipse之后,一切都正常了。
在JNI模块中使用NewDirectByteBuffer
.