您的位置:首页 > 其它

jni关于内部类的一些问题

2012-06-04 15:22 302 查看
初次接触JNI,本来对java也不熟,因为要做android的项目,碰到了一些问题,特此记录

java代码如下:

class A{

static{

System.loadLibrary("A");

}

int a = 1;

class B{

int b = 2;

public void show(){

System.out.println("b = " + b);

}

};

public native B getB();

public void show(){

System.out.println("a = " + a);

getB().show();

}

};

如上代码,A有一个内部类B,如果要在JNI层返回B的实例,首先用 javap -s -p A.B 查看签名得到

A$B(A);

Signature: (LA;)V

说明B的构造函数带有一个参数类A

c代码如下:

JNIEXPORT jobject JNICALL Java_A_getB(JNIEnv *env, jobject thiz)

{

jobject b = NULL;

jclass bcls = (*env)->FindClass(env,"A$B");

jmethodID mid = (*env)->GetMethodID(env,bcls,"<init>","(LA;)V");

b = (*env)->NewObject(env,bcls,mid,thiz);

return b;

}

注意上面的红色代码,因为B是A的内部类,所以FindClass的时候是A$B

然后是B的构造方法,因为是构造方法,所以GetMethodID的第三个参数固定为"<init>",第四个参数,对于一般类来说为"()V",

因为B是A的内部类,通过上面的javap查看得到此处应该为"(LA;)V"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: