如何解决jni:在 jclass 上调用对象方法
我遇到了这个代码
jclass mainClass = env->FindClass("com/example/MainActivity");
jclass classClass = env->FindClass("java/lang/Class");
jclass classLoaderClass = env->FindClass("java/lang/ClassLoader");
jmethodID getClassLoaderMethod = env->GetMethodID(classClass,"getClassLoader","()Ljava/lang/ClassLoader;");
jobject classLoader = env->CallObjectMethod(mainClass,getClassLoaderMethod);
jmethodID findClassMethod = env->GetMethodID(classLoaderClass,"findClass","(Ljava/lang/String;)Ljava/lang/Class;");
令我惊讶的是,它实际上是有效的。 classLoader 和 findClassMethod 是有效的,可用于后续对 java 的调用。
有人能解释一下为什么 CallObjectMethod
行在这里工作,因为方法 getClassLoader 是一个对象方法,但它是在 jclass 上调用的。
解决方法
getClassLoader
是 java.lang.Class
的实例方法,因此您需要使用 CallObjectMethod
并将其传递给 Class
实例。您在 mainClass
中拥有的是 Class
的实例(特别是 Class<MainActivity>
的实例)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。