我想使用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;
答案 0 :(得分:1)
正确地注释 @talex ,您无法使用C结构填充Java数组。您应该声明一个与Spieler结构等效的Java类,并在循环中使用此Java类的构造函数创建数组的每个元素。
类似的东西,
public class Spieler {
private String vorname;
private String nachname;
private int trikotnummer;
public Spieler(String vorname, String nachname, int trikotnummer) {
this.vorname = vorname;
this.nachname = nachname;
this.trikotnummer = trikotnummer;
}
};
JNI不是使用构造函数,而是允许您获取Java类字段的字段ID,并单独设置它们(即使它们是私有的)。