繁体   English   中英

如何在JNI层中修改Java类对象

[英]How to modify java class object in JNI layer

我需要在JNI层中更改/分配Java类对象的值。 我是Java和JNI的新手。 以下是我编写的代码。

JNI_Test.java

public class JNI_Test {
    enum Gender {
        MALE,
        FEMALE;
    }

    class StudentDetails {
        int rollNum;
        String studentName;
        Gender gender;
    }

    class Students {
        int studentsCount;
        StudentDetails stDetails;
    }

    public native int getStudentDetails(Students obj);

    static {
        System.loadLibrary("student");
    }
}

在下面的JNI层中,我需要分配/修改Students obj的值。

JNI_Test.c

#include "JNI_Test.h"

JNIEXPORT jint JNICALL Java_JNI_1Test_getStudentDetails (JNIEnv *env, jobject obj, jobject student)
{
    jint retVal = 0;

    /** Here I need to assign/modify value to the 'jobject student' java object 
        like student.studentsCount = 10; ...*/

    return retVal;
}

有人请帮助我,我不知道该怎么办..在此先感谢。

JNI非常复杂。 如果可以的话,我会尝试使用JNA。 对于直接的JNI,您必须执行类似的操作。

JNIEXPORT jint JNICALL Java_JNI_1Test_getStudentDetails (JNIEnv *env, jobject obj, jobject student)
{
    jint retVal = 0;
    jclass thisClass = (*env)->GetObjectClass(env, obj);
    jfieldID fidStudentCount = (*env)->GetFieldID(env, thisClass, "studentsCount", "I");
    jint number = 10;
    (*env)->SetIntField(env, student, fidStudentCount, number);
    return retVal;
}

使用JNI,例如,您必须非常小心地使用字符串,否则可能会发生内存泄漏。 例如,您必须将对GetStringUTFChars的调用与ReleaseStringUTFChars配对。

另请参阅此链接

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM