从jclass(JNI)获取完全限定的类名,以便在FindClass中使用

时间:2015-03-20 19:46:51

标签: java c++ java-native-interface

我们假设我们有一个jclass的实例:

auto objectClass = env->GetObjectClass(obj);
EXCEPTION_RETURN(env);

在下一行,我想获取类的名称并存储,以便稍后我可以使用FindClass

我尝试过使用getName()方法但返回了一个java类名,我们无法在FindClass中使用它。以下是getName()方法的代码:

std::string GetObjectClassName(JNIEnv* env, jobject javaObject)
{
    auto javaClass = env->GetObjectClass(javaObject);
    EXCEPTION_RETURN(env);

    auto javaClassClass = env->FindClass("java/lang/Class");
    EXCEPTION_RETURN(env);

    auto javaClassNameMethod = env->GetMethodID(javaClassClass, "getName", "()Ljava/lang/String;");
    EXCEPTION_RETURN(env);

    auto javaClassNameJString = (jstring)env->CallObjectMethod(javaClass, javaClassNameMethod);
    EXCEPTION_RETURN(env);

    auto javaClassNameC = env->GetStringUTFChars(javaClassNameJString, 0);
    EXCEPTION_RETURN(env);
    std::string javaClassName(javaClassNameC);

    env->ReleaseStringUTFChars(javaClassNameJString, javaClassNameC);
    EXCEPTION_RETURN(env);

    return javaClassName;
}

请注意,返回的类名不能用于FindClass()方法。我们有一个简单的方法从jclass对象获取类名吗?

0 个答案:

没有答案