我需要在 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 配对。
另请参阅this link .
关于java - 如何在JNI层修改java类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52350437/