Собственный интерфейс Java: передача объектов - PullRequest
0 голосов
/ 01 ноября 2018

Я пытался реализовать простой код передачи объекта, но компилятор допустил ошибку.

Ошибка

Исключение в потоке "main" java.lang.NoSuchFieldError: считать в objectpassing.ObjectPassing.changeCount (собственный метод)

Вот мой код Java

public class ObjectPassing {
    static{
        System.load("out.dll");
    }
    int count=10;
    String message="hi";
    public static void main(String[] args) 
    {
        ObjectPassing ob=new ObjectPassing();
        ObjectPassing.changeCount();
        System.out.println("Number in java"+ob.count);
        System.out.println(ob.message);
    }
    private static native void changeCount();
}

Мой код C:

#include <stdio.h>
#include <stdlib.h>
#include <jni.h>
#include "jnivg.h"

JNIEXPORT void JNICALL Java_objectpassing_ObjectPassing_changeCount
  (JNIEnv *env, jclass o)
{
    jclass  tc=(*env)->GetObjectClass(env,o);
    jfieldID fid=(*env)->GetFieldID(env,tc,"count","I");
    jint n=(*env)->GetIntField(env,o,fid);
    printf("Number in c= %d",n);
    n=200;
    (*env)->SetIntField(env,o,fid,n);
}

1 Ответ

0 голосов
/ 01 ноября 2018

Вы пытаетесь получить значение нестатического поля из статического метода , что невозможно из-за здравого смысла, независимо от того, является ли ваш метод собственным или нет.

Вы должны либо сделать ваше поле count статическим и использовать с ним функции GetStaticFieldID и GetStaticIntField. Или сделайте ваш метод changeCount нестатичным, чтобы он имел параметр jobject вместо jclass, который вы затем сможете использовать с функцией GetIntField.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...