Java Native Interface回调jstrings作为jobjectArray jmethodID的签名错误

时间:2015-08-04 09:42:15

标签: java c java-native-interface

如果我尝试在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");
    }

}

谢谢;)。

1 个答案:

答案 0 :(得分:0)

String对象的签名是Ljava/lang/String;,而不是Ljava/lang/String