有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JNI“jobject thiz”和jboolean参数关系

我有这样的JNI代码:

  class NativeConnector {
    public static native getKey(boolean isValid);
  }


  JNIEXPORT jstring JNICALL 
  Java_com_mg_helper_NativeConnector_getKey(JNIEnv *env, jboolean is_valid) {
      if (is_valid) {
         return (*env)->NewStringUTF(env, "48759d35c");
      } else {
         return (*env)->NewStringUTF(env, "527c4f704");
      }
   }

问题是JNI中的is_valid总是true,结果总是"48759d35c",尽管我在方法getKey中发送false

   NativeConnector.getKey(false) // result is "48759d35c"

如果我用jobject更改JNI方法,它可以很好地工作:

 JNIEXPORT jstring JNICALL 
  Java_com_mg_helper_NativeConnector_getKey(JNIEnv *env, jobject thiz , jboolean is_valid) 

根据this answerjobject thiz引用类型为(NativeConnector)的对象,jclass用于静态方法

所以问题是,在这种情况下,jobjectjclassjboolean之间的关系是什么?如果我不使用jobject,为什么jboolean参数总是真的


共 (1) 个答案

  1. # 1 楼答案

    @user207421答案中的输入错误

    对于静态方法, 公共静态本机getKey(boolean-isValid)

    JNIEXPORT jstring JNICALL Java_com_mg_helper_NativeConnector_getKey(JNIEnv*env、jclass cls、jboolean是有效的)

    也许早期javah在第二个参数中使用jobject,只是 jdk8 javah使用jclass