2 回答
TA贡献1878条经验 获得超4个赞
我找到了解决方案:
JNIEXPORT void JNICALL Java_ConsoleIO_printList(JNIEnv *env, jclass cls, jobject obj)
{
jclass listClass = (*env)->GetObjectClass(env,obj);
jmethodID sizeMethod = (*env)->(env,listClass,"size","()I");
jmethodID getMethod = (*env)->GetMethodID(env,listClass,"get","(I)Ljava/lang/Object");
jint size = (*env)->CallIntMethod(env,sizeMethod);
}
TA贡献1804条经验 获得超8个赞
Java 有类型擦除。所以在编译后的代码中List<String>就变成List了。
因此,您真正要寻找的是使用 JNI 实现以下 Java 调用:
jint size = list.size();
for (jint i = 0; i < size; i++) {
jobject elem = list.get(i);
jstring str = (jstring)elem;
... print str ...
}
在上面的 C 代码中,list.size()andlist.get()必须替换为对GetMethodID,CallIntMethod和 的调用CallObjectMethod。可以str使用GetStringChars或检索字符串GetStringUTFLength。并且需要一些内存管理:ReleaseXXX.
添加回答
举报