我一直在尝试从 jclass 对象打印出类名。
jmethodID mid_getName = env->GetMethodID(point_class, "getName", "()Ljava/lang/String;");
point_class
对象不为 NULL。
我使用了 Can I know the name of the class that calls a JNI C method? 中的这个 fragment 和 Class name from jclass in JNI
另一方面,我正在为 android 进行 JNI 编程,当我想在 native 端创建 Java 对象时,我的 FindClass
方法返回 NULL。没有混淆问题或其他任何问题。
代码:
JNIEXPORT void JNICALL long_JNI_method_name (JNIEnv * env, jobject object, jlong image, jint screenHeight, jint screenWidth) {
jclass point_class = env->GetObjectClass(object);
jmethodID mid_getName = env->GetMethodID(point_class, "getName", "()Ljava/lang/String;");
...
我更改了 JNI 方法名称,因为它包含包名称(我工作的地方)。
最佳答案
您尝试获取对象
的方法getName()
。但是对象(以及从对象派生的类)没有方法 getName()
。 getName()
是类 Class
的一个方法。你的问题就像你试着打电话
anObject.getName();
而不是正确的
anObject.getClass().getName();
相应的 C++ 代码必须首先调用 getClass
,然后它可以搜索 getName
,它可能看起来像:
jclass point_class = env->GetObjectClass(object);
jmethodID getclass = env->GetMethodID(point_class, "getClass", "()Ljava/lang/Class;");
jobject classsObj = env->CallObjectMethod(object, getclass);
jclass classclass = env->GetObjectClass(classsObj);
jmethodID mid_getName = env->GetMethodID(classclass, "getName", "()Ljava/lang/String;");
关于java - "getName"的 GetMethodID 返回 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33740324/