gpt4 book ai didi

java - 在 C 中创建 jobobject 不起作用

转载 作者:行者123 更新时间:2023-11-30 15:05:15 28 4
gpt4 key购买 nike

我想使用 JNI 将 jobobjectArray 从 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;

最佳答案

正如@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,并单独设置它们(即使它们是私有(private)的),而不是使用构造函数。

关于java - 在 C 中创建 jobobject 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39946330/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com