2012-02-13 29 views
10

这可能是一个愚蠢的问题,显示出对JNI的理解不足。我正在编写封装Java VM的C++程序:我使用CallVoidMethod等调用在VM内调用函数。这纯属背景,与问题无关。JNI中jclass的类名称

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

回答

12

jclass实例是您的对象上的方法将被调用;您需要查找Class类中的getName方法ID,然后使用CallObjectMethodjclass实例上调用它以获得jstring结果。

所以总之是的,你只需调用GetName函数并看看jstring的结果。

编辑

(错误处理消隐)

JNIENV* env = ...; 
// substitute your desired class's specifier for "java/lang/Class"... 
jclass cls = (*env)->FindClass("java/lang/Class"); 
MethodID mid_getName = (*env)->GetMethodID(env, cls, "getName", "()Ljava/lang/String;"); 
jstring name = (*env)->CallObjectMethod(env, cls, mid_getName); 
+0

我很抱歉,但我的大脑刚开始吃自己时,它读取你的答案,由于这一问题的嵌套元的性质。你可能会展示一个简单的代码示例吗? – namuol 2013-04-03 06:38:26

+0

看起来很有希望,但env-> ExceptionOccurred()为我调用GetMethodID后为true – JonnyBoy 2014-03-20 19:53:51

+0

我认为这可能更接近寻求的答案:http://stackoverflow.com/questions/12719766/can-i-know-the这种类的名称,即调用一个jni-c方法 – Wheezil 2014-10-13 22:55:53