日期:2014-05-20  浏览次数:20648 次

JNI中C操作java类属性的问题。
我的问题是这样的,我C中有一个函数要返回到java一个结构体。我打算直接在C中通过操作java的类的属性实现。
我在java中每个结构定定义了一个对应的实体类。
然后把java中的所有本地方法写在另一个类中、也就是说那些实体类和本地方法的类是分开的、
这样我在JNI的c中操作java实体类的那些属性都没有效?
只能把实体类里面的那些属性和声明本地方法的那个类写在一个类里面才可以吗?

C的代码如下。C的代码没有问题。因为我测试把实体类和声明本地方法的类放一起是可以的,而且编译可以通过。
//操作java屬性
JNIEXPORT void JNICALL Java_com_jni_test_Lesson1_upPerson
  (JNIEnv * env, jobject obj){
    jclass clazz = (*env)->FindClass(env,"com/jni/test/Person");
    jfieldID id_member = (*env)->GetFieldID(env,clazz, "age", "I");
    jint number = (*env)->GetIntField(env,obj, id_member);
    (*env)->SetIntField(env,obj, id_member, 20L);

    jfieldID sex_number = (*env)->GetFieldID(env,clazz, "sex", "Ljava/lang/String;");
    jstring sex = (*env)->GetObjectField(env,obj,sex_number);
    sex=(*env)->NewStringUTF(env,"zhengwei");
    (*env)->SetObjectField(env,obj,sex_number,sex);

}

因为我结构体很多,结构体里的属性也很多,所以我想把结构体对应的实体类单独写一个类。

------解决方案--------------------
java中的所有本地方法怎么样写在另一个类中?没见过
------解决方案--------------------