2011-07-25 186 views
3

我有拥有另一个类的对象的类。当我通过jobject将该对象传递给我的jni函数时,getFieldID表示它找不到该字段。变量名是绝对正确的jni传递类对象作为参数

jfieldID fidPopulation = (*env)->GetFieldID(env,cls,"mPopulation","I"); 
+0

是否有此功能的任何更新? – jogabonito

+0

得到了一个没有发现异常的类。 b类与a类不在一个包里有什么关系吗? – VBK

+0

您应该使用类的完整包名称路径调用findClass。 A和B存在的软件包并不重要 – jogabonito

回答

0

在此功能,您试图访问称为mPopulation整型字段。从你的问题看,你似乎试图访问一个对象字段。 “我”意味着它是一个整数。如果你想获得一些对象,你应该给它的路径有点像“org/abc/MyClass”
我按照下面的注释添加了一些代码。
objectA由JVM传递,并且是调用此函数的对象。 objectB是一个参数,是org/demopath/ClassB.java类的一个对象,并被传递给java的测试函数。

Java_MyTestFunction(JNIEnv *env, jobject objectA, jobject objectB) { 
     jclass cls = (*env)->FindClass(env, "org/demopath/ClassB"); 
     jfieldID fid = (*env)->GetFieldID(env, cls, "mPopulation ", "I"); 
     jint population = (*env)->GetIntField(env, objectB, fid); 
    }  

我手工编码的签名,所以可能会有一些错误。始终使用生成的签名

+0

对不起,我感到困惑。让我解释我想做什么。我有一个类A包含一个类B的对象,它有一个成员mPopulation和一些其他成员,我想从jni访问。 jni函数是从类A调用的。我如何访问jni中的类B的对象及其相应的成员? – VBK

+0

由于您正在从A的对象调用JNI,因此请使用该对象,它将成为函数签名中的第二个参数。如上所述,从类A中获取对象b的fieldID。使用它来获得对象B的引用,然后用它来获取B中的字段请参阅http://java.sun.com/developer/onlineTraining/Programming/JDCBook/jniref.html – jogabonito

+0

即使对象b是在对象A的函数中声明? – VBK

相关问题