Java本机接口回调jstrings作为jmethodID的jobjectArray签名错误

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

如果我试图从JNI向jobjectArray中的Java传递JString,我就会出错。我已经研究过很多次了,它应该是有效的。但是我的签名[Ljava/lang/String不起作用。当我不传递任何内容时,它会起作用。当我返回jobjectArray时,它也会起作用。当我尝试将数组发送到Java方法时,会发生错误。因此,我认为字符串不起作用。我希望有人能帮助我,这样对其他人来说也会更容易。我将发送我的小程序来演示我的错误

以下是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);
}

谢谢;)。

字符串对象的签名是
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");
    }

}