输出: javap -s SomeClass
public org.someapp.SomeClass$_data data;
Signature: Lorg/someapp/SomeClass$_data;Java中SomeClass的定义:
class SomeClass
{
private class _data {
byte[] something = new byte[1234];
}
public _data data;
}Java中原生函数的定义:
public static native int NativeFunction(SomeClass something);Java实现:
SomeClass x = new SomeClass();
NativeInterface.NativeFunction(x);但是,当执行以下代码时:
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");
}Java在GetFieldID调用中抛出"NoSuchFieldError;:data“异常。我不明白..签名很好(直接从javap复制)。
请注意,为一个更简单的变量获取字段ID,比如一个无符号的短整型(带有签名"S")就可以了。
发布于 2009-12-08 10:18:44
我有一种感觉,"Lorg/someapp/SomeClass$_data"应该是"Lorg/someapp/SomeClass$_data;"。请注意分号。
https://stackoverflow.com/questions/1863818
复制相似问题