简体   繁体   English

如何从JNI将数组传递给Java方法

[英]How to pass array to java method from jni

I am trying to pass a int array from JNI to Java . 我正在尝试从JNI to Java传递一个int array JNI to Java When I pass single or multiple int value, it works but passing array is not working. 当我传递single or multiple int值时, it works但是传递array不起作用。 Every time app crash and return the following error 每次应用程序崩溃并返回以下错误

Error 错误

Invalid indirect reference 0x48609264 in decodeIndirectRef
Fatal signal 11 (SIGSEGV) at 0xdeadd00d....

JNI JNI

jclass dataClass = env->FindClass("com/mypkg/project/DemoNative");
javaClassRef = (jclass) env->NewGlobalRef(dataClass);
javaMethodRef = env->GetMethodID(javaClassRef, "onDataReady", "([II)V");
jobject javaObjectRef = env->NewObject(javaClassRef, javaMethodRef);
jint array[2] = {1};
jintArray result;
result = env->NewIntArray(2);
env->SetIntArrayRegion(result,0,2,array);
env->CallVoidMethod(javaObjectRef, javaMethodRef,result,2);

Java Java的

public void onDataReady(int[] array,int len){
}

The line 线

jobject javaObjectRef = env->NewObject(javaClassRef, javaMethodRef);

is definitely wrong. 肯定是错的。 It tries to use the method ID for onDataReady() as a constructor. 它尝试将onIDReady()的方法ID用作构造函数。

You probably need 你可能需要

jmethodID javaDefaultConstructor = env->GetMethodID(javaClassRef, "<init>", "()V");
jobject javaObjectRef = env->NewObject(javaClassRef, javaDefaultConstructor);

Note that jmethodID is not a reference: you can find the ID once and use it from any thread and on any instance you like. 请注意,jmethodID不是参考:您可以找到该ID一次,并可以在任何线程和您喜欢的任何实例上使用它。 It's just a number, constant at least for the lifetime of your application. 这只是一个数字,至少在您的应用程序生命周期内是恒定的。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM