我有想要在 JNI 中访问的公共内部类。GetFieldID 在访问内部类的 fieldId 时返回 null
下面是代码
public class classA{
public class classB{
public int b1;
}
public int a1;
public classB B;
}
注意:当我在类文件上运行 javap -s 时,我得到以下输出
public class level1.level2.level3.classA{
public int a1;
descriptor : I
public level1.level2.level3.classA$classB B;
descriptor : Llevel1/level2/level3/classA$classB;
这是调用本机函数的类。
public class extraclass{
private native int myfunction1(classA A);
public int extrafunction(classA A){
myfunction1(A);
}
}
本机代码
JNIEXPORT jint JNICALL myfunction1( JNIEnv *env, jobject obj ,jobject A)
{
jclass cls = (*env)->GetObjectClass( env, A);
jfieldID ja1,jB;
int a1;
ja1 = (*env)->GetFieldID( env, cls, "a1","I" );
a1 = (*env)->GetIntField(env, config, ja1); // This works good.
jB = (*env)->GetFieldID( env, cls, "B","Llevel1/level2/level3/classA$classB;" );
// <<< Its crashing here with "JNI DETECTED ERROR IN APPLICATION: JNI GetFieldID called with pending exception 'java.lang.NoSuchFieldError'"
}
我也尝试了以下选项但失败了
jB = (*env)->GetFieldID( env, cls, "B","LclassA$classB;" );
有人可以建议如何获取 classB 的字段 id 并访问 b1。