有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    正如@talex正确评论的那样,不能用C结构填充Java数组。您可能应该声明一个与Spiler结构等效的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,并单独设置它们(即使它们是私有的)