java在C中创建jobject不起作用
我想使用JNI将jobjectArray
从C传输到Java
目前,我发现以下错误:
SharedTable.c: In function ‘JAVA_model_JNIResultSet_getSpieler’:
SharedTable.c:116:5: warning: passing argument 4 of ‘(*env)->SetObjectArrayElement’ from incompatible pointer type [enabled by default]
ret, i, ptr);
我知道我应该返回一个jObject,但我不知道如何创建它
我的结构如下所示:
typedef struct _Spieler {
char vorname[50];
char nachname[50];
int trikotnummer;
struct _Spieler *next;
} Spieler;
我的代码如下所示:
Spieler *ptr = head;
jobjectArray ret;
int i;
jclass class = (*env)->FindClass(env, "model/Spieler");
ret= (*env)->NewObjectArray(env, count, class, NULL);
for(i = 0; i < count; i++) {
(*env)->SetObjectArrayElement(env, ret, i, ptr);
ptr = ptr->next;
}
return ret;
# 1 楼答案
正如@talex正确评论的那样,不能用C结构填充Java数组。您可能应该声明一个与Spiler结构等效的Java类,并在循环中使用该Java类的构造函数创建数组的每个元素
大概
JNI不使用构造函数,而是允许您获取Java类字段的字段ID,并单独设置它们(即使它们是私有的)