java.lang.nosuchfielderror jni,JNI:NoSuchFieldError

Output of: javap -s SomeClass

public org.someapp.SomeClass$_data data;

Signature: Lorg/someapp/SomeClass$_data;

Definition of SomeClass in Java:

class SomeClass

{

private class _data {

byte[] something = new byte[1234];

}

public _data data;

}

Definition of native function in Java:

public static native int NativeFunction(SomeClass something);

Java implementation:

SomeClass x = new SomeClass();

NativeInterface.NativeFunction(x);

However, when the following code is executed:

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 throws a "NoSuchFieldError;: data" exception on the GetFieldID call. I don't get it.. The signature is just fine (copied straight from javap).

Note that getting the field ID for a simpler variable, like an unsigned short (with signature "S") works just fine.

解决方案

I have a feeling that "Lorg/someapp/SomeClass$_data" should be "Lorg/someapp/SomeClass$_data;". Note the semicolon.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值