我一直在尝试从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?和Class name from jclass in JNI
中的这个代码段另一方面,我正在为android做JNI编程,当我想在本机端创建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方法名称,因为它包含了包名(我工作的地方)。
答案 0 :(得分:1)
您尝试获取getName()
的方法object
。但是对象(以及从对象派生的类)没有方法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;");