小编Joh*_*ohn的帖子

JNI:NoSuchFieldError

输出:javap -s SomeClass

public org.someapp.SomeClass$_data data;
  Signature: Lorg/someapp/SomeClass$_data;
Run Code Online (Sandbox Code Playgroud)

Java中SomeClass的定义:

class SomeClass
{
    private class _data {
        byte[] something = new byte[1234];
    }

    public _data data;
}
Run Code Online (Sandbox Code Playgroud)

Java中本机函数的定义:

public static native int NativeFunction(SomeClass something);
Run Code Online (Sandbox Code Playgroud)

Java实现:

SomeClass x = new SomeClass();
NativeInterface.NativeFunction(x);
Run Code Online (Sandbox Code Playgroud)

但是,执行以下代码时:

JNIEXPORT jint JNICALL Java_org_someapp_NativeInterface_NativeFunction(JNIEnv* env, jobject obj, jobject someobject) {
    jclass some_class = (*env)->GetObjectClass(env, someobject);
    jfieldID data = (*env)->GetFieldID(env, some_class, "data", "Lorg/someapp/SomeClass$_data"); 
}
Run Code Online (Sandbox Code Playgroud)

Java在GetFieldID调用上抛出"NoSuchFieldError;:data"异常.我不明白..签名很好(直接从javap复制).

请注意,获取更简单变量的字段ID(如无符号短(带有签名"S"))可以正常工作.

java java-native-interface android

1
推荐指数
1
解决办法
2682
查看次数

标签 统计

android ×1

java ×1

java-native-interface ×1