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

Java Native Interface callback jstrings as a jobjectArray Signature error of jmethodID

如果我尝试从 JNI 将 jstrings 传递给 jobjectArray 中的 Java,我就会出错。我对此进行了多次研究,它应该有效。但是我的签名 [Ljava/lang/String 不起作用。当我什么都不通过时,它就起作用了。当我 return 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");
    }

}

谢谢 ;).

字符串对象的签名是Ljava/lang/String;,不是Ljava/lang/String