JNI中jclass的类名

Nic*_*ole 12 java-native-interface

这可能是一个愚蠢的问题,揭示了对JNI缺乏了解.我正在编写一个封装Java VM的C++程序:我使用CallVoidMethod之类的调用来调用VM中的函数.这纯粹是背景,与问题无关.

我希望能够在给定jclass实例的情况下找到Java类的名称.有没有办法做到这一点?我可以像在Java程序中一样调用GetName函数吗?

tec*_*age 12

jclass实例是您将在其上调用方法的对象; 您需要getNameClass类上查找方法ID ,然后jclass使用CallObjectMethod获取jstring结果在实例上调用它.

所以简而言之,你只需调用getName函数并查看jstring结果.

编辑

(错误处理省略)

JNIEnv* env = ...;
// substitute your desired class's specifier for "java/lang/Class"...
jclass cls = env->FindClass("java/lang/Class"); 
jmethodID mid_getName = env->GetMethodID(cls, "getName", "()Ljava/lang/String;");
jstring name = env->CallObjectMethod(cls, mid_getName);
Run Code Online (Sandbox Code Playgroud)

  • 我认为代码不太正确。如果您有一个 jclass 对象 myJClass,那么您仍然需要获取 java.lang.Class 的 jclass 对象,并在该对象上查找 getName() 方法。所以你需要两个 jclass 对象:一个是你开始的(在我上面的例子中是 myJClass),一个代表 java.lang.class。您将后者传递给 GetMethodID(),将前者传递给 CallObjectMethod()。 (3认同)
  • 抱歉,由于这个问题的嵌套元性质,当我的大脑读到你的答案时,它就开始自我吞噬。您能展示一个简单的代码示例吗? (2认同)