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"
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"
相关文章推荐
- 关于VS 使用GDB工具调试ADT下JNI时遇到的一些问题的解决
- 一些关于linux 下的jni下问题
- 一些关于linux 下的jni下问题
- 关于Android下的JNI编程、SO库以及NDK的一些问题
- 关于DCMTK中findscu.exe使用的一些问题
- 关于SQLite3 编译及交叉编译的一些问题 (2012-12-11 16:22:18)
- 关于dao得一些使用问题,以备忘....也用来纪念自己解决得第一个内存泄漏问题
- php关于cookie的一些问题
- 关于Uplodify与Jfinal搭配的一些问题
- 关于myhabits一些异常以及处理问题
- java中关于位移运算的一些小问题
- 关于SourceAnyWhere问题的一些领悟
- 关于设计SQL表的一些问题
- 关于网线的一些问题
- 黑马程序员-关于异常的一些问题
- 关于SQLite3 编译及交叉编译的一些问题
- 关于在项目中遇到的一些兼容性问题----img
- 关于new和delete中的一些问题
- Android记录23-关于actionbar中overflow menu(溢出菜单)中的一些问题
- 关于mysql常见的问题(一些常见问题的解决方案)