JNI GetObjectClass始终返回java / lang / Class

时间:2012-05-22 21:14:14

标签: java android-ndk java-native-interface

env->使用

时,CallVoidMethod返回java / lang / Class
env->GetObjectClass(aobject); //aobject was the argument sent by JNI to C++

aobject是一个实现接口的Java对象。

jobject obj = env->GetObjectClass(aobject) 

应该返回Java对象,而是返回java / lang / Class

3 个答案:

答案 0 :(得分:1)

我的问题的答案在沉亮的“The Java Native Interface - Programmer's Guide and Specification”中有所描述。

“您可以使用Call< Type>方法系列函数来调用接口方法。您必须从接口类型”

中派生方法ID

答案 1 :(得分:1)

我遇到此错误,必须在工作中四处询问,然后才能得到真正的答案。

问题在于,当您将native方法指定为static时,它会提供jclass的实例,而不是该类的jobject实例,因为从静态上下文调用。 (如果您在该getCanonicalName()上调用jclass,它将返回您的班级名称。)

如果本机方法需要是静态的,那么您需要时将实例作为参数传递。否则,只需使其不为静态即可,并且应该一切都固定了。

答案 2 :(得分:0)

您没有重新生成.h / .c文件,因为您删除了'static',因此您的JNI方法签名与Java不匹配。参数列表中有一个额外的jclass,它只用于静态方法。所以你会得到一些非常奇怪的执行。