Java本机接口回调jstrings作为jmethodID的jobjectArray签名错误
如果我试图从JNI向jobjectArray中的Java传递JString,我就会出错。我已经研究过很多次了,它应该是有效的。但是我的签名[Ljava/lang/String不起作用。当我不传递任何内容时,它会起作用。当我返回jobjectArray时,它也会起作用。当我尝试将数组发送到Java方法时,会发生错误。因此,我认为字符串不起作用。我希望有人能帮助我,这样对其他人来说也会更容易。我将发送我的小程序来演示我的错误 以下是C代码:Java本机接口回调jstrings作为jmethodID的jobjectArray签名错误,java,c,java-native-interface,Java,C,Java Native Interface,如果我试图从JNI向jobjectArray中的Java传递JString,我就会出错。我已经研究过很多次了,它应该是有效的。但是我的签名[Ljava/lang/String不起作用。当我不传递任何内容时,它会起作用。当我返回jobjectArray时,它也会起作用。当我尝试将数组发送到Java方法时,会发生错误。因此,我认为字符串不起作用。我希望有人能帮助我,这样对其他人来说也会更容易。我将发送我的小程序来演示我的错误 以下是C代码: #include <jni.h> #inclu
#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);
}
谢谢;)。字符串对象的签名是
Ljava/lang/String;
,而不是Ljava/lang/String
。字符串对象的签名是Ljava/lang/String;
,而不是Ljava/lang/String
,不要编写自己的方法签名。使用javap-s
的输出。这从来没有错过。谢谢u EJP!你能给我一个例子吗?;D我想要它…javap-s clas | grep-A 2“void callback(java\.lang\.String\[\])”
不要写你自己的方法签名。使用javap-s
的输出。它从来没有错过。谢谢你EJP!你能给我一个例子吗?;D我想要它…javap-s clas | grep-A 2“void callback(java\.lang\.String\[\])”
非常感谢!非常有效;)哦,伙计们,如果我要添加另一个参数,我想我必须设置分号。:D非常感谢!非常有效;)哦,伙计们,我想如果我要添加另一个参数,我必须设置分号。:D
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");
}
}