使用C中的JNI从对象获取对象

public class Student { private People people; private Result result; private int amount; } 

以下是Java中类的示例; 在C中,我试图让“学生”中的“人”,但我失败了。 但是,我可以从“学生”获得int类型“金额”。

 jobject getObjectFromObject(JNIEnv *env, jobject obj, const char * fieldName) { jfieldID fid; /* store the field ID */ jobject i; /* Get a reference to obj's class */ jclass cls = (*env)->GetObjectClass(env, obj); /* Look for the instance field s in cls */ fid = (*env)->GetFieldID(env, cls, fieldName, "L"); if (fid == NULL) { return 0; /* failed to find the field */ } /* Read the instance field s */ i = (*env)->GetObjectField(env, obj, fid); return i; } 

我试图将“people”作为fieldName传递给方法,但它仍然会出现以下错误:“java.lang.NoSuchFieldError:people”

如此处所述 ,在GetFieldID方法中,您不能单独使用“L”作为类型签名,您必须在此之后指定类名。

例如,如果要指定参数是String ,则必须使用Ljava/lang/String; (最终的分号是签名的一部分!)。

对于名为People的自定义类,假设它位于包your.package.name ,则必须使用Lyour/package/name/People; 作为类型签名。