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 answer,jobject thiz
引用类型为(NativeConnector)的对象,jclass
用于静态方法
所以问题是,在这种情况下,jobject
,jclass
和jboolean
之间的关系是什么?如果我不使用jobject
,为什么jboolean
参数总是真的
# 1 楼答案
@user207421答案中的输入错误
对于静态方法, 公共静态本机getKey(boolean-isValid)
JNIEXPORT jstring JNICALL Java_com_mg_helper_NativeConnector_getKey(JNIEnv*env、jclass cls、jboolean是有效的)
也许早期javah在第二个参数中使用jobject,只是 jdk8 javah使用jclass