env->使用
时,CallVoidMethod返回java / lang / Classenv->GetObjectClass(aobject); //aobject was the argument sent by JNI to C++
aobject是一个实现接口的Java对象。
jobject obj = env->GetObjectClass(aobject)
应该返回Java对象,而是返回java / lang / Class
答案 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,它只用于静态方法。所以你会得到一些非常奇怪的执行。