4
public class Student
{
   private People people;
   private Result result;
   private int amount;
}

Java のクラスのサンプルを次に示します。Cで、「学生」の「人」を取得しようとしましたが、失敗しました。しかし、「学生」からint型の「金額」を取得できています。

jobject getObjectFromObject(JNIEnv *env, jobject obj, const char * fieldName)
{
    jfieldID fid; /* store the field ID */
    jobject i;

    /* Get a reference to obj's class */
    jclass cls = (*env)->GetObjectClass(env, obj);

    /* Look for the instance field s in cls */
    fid = (*env)->GetFieldID(env, cls, fieldName, "L");
    if (fid == NULL)
    {
        return 0; /* failed to find the field */
    }

    /* Read the instance field s */
    i = (*env)->GetObjectField(env, obj, fid);

    return i;
}

"people" を fieldName としてメソッドに渡そうとしていますが、それでも次のエラーが発生します: "java.lang.NoSuchFieldError: people"

4

1 に答える 1

8

hereに記載されGetFieldIDているように、型シグネチャとして "L" だけを使用できないメソッドでは、その後にクラス名を指定する必要があります。

たとえば、引数が であることを指定したい場合は、String使用する必要がありますLjava/lang/String;(最後のセミコロンは署名の一部です!)。

という名前のカスタム クラスPeopleの場合、それが package にあると仮定すると、型シグネチャとしてyour.package.name使用する必要があります。Lyour/package/name/People;

于 2013-04-03T09:30:42.043 に答える