如果我尝试在JNI的jobjectArray中将jstrings传递给Java,那么我就成了一个错误。我研究了很多次,它应该工作。但我的签名[Ljava / lang / String不起作用。当我没有通过任何它是有效的。当我返回jobjectArray时它也有效。当我尝试将数组发送到Java方法时,然后发生错误。所以我认为Sinature不起作用。我希望有人可以帮助我,这样对其他人来说也会更容易。我将发送我的小程序来证明我的错误。
这是C代码:
#include <jni.h>
#include <stdio.h>
#include <stdlib.h>
#include "clas.h"
JNIEXPORT void JNICALL Java_clas_function(JNIEnv *env, jobject jobj, jobjectArray in_array){
jclass icls = (*env)->GetObjectClass(env, jobj);
jmethodID jmid = (*env)->GetMethodID(env, icls, "callback", "([Ljava/lang/String)V");
if(jmid == 0){
printf("False Signature\n");
exit(-1);
}
(*env)->CallVoidMethod(env, jobj, jmid, in_array);
}
Java代码:
public class clas {
public clas(){
String[] c = {"something", "something else", "another one"};
function(c);
}
public native void function(String[] in_strg);
public static void main(String[] args){
clas c = new clas();
}
private void callback(String[] in_string){
System.out.println("reached");
}
static {
System.loadLibrary("clas");
}
}
谢谢;)。
答案 0 :(得分:0)
String对象的签名是Ljava/lang/String;
,而不是Ljava/lang/String
。