jni 获取java对象,JNI调用java方法, new java对象,new java内部类

欢迎转载学习 ,转载请注明:http://blog.csdn.net/qq377366355/article/details/77869801

JNI调用java方法, new java对象,new java内部类

1.new java对象 new java内部类 创建内部类,要先创建外部类实例

构造方法都是用

public classTest {

public voidtest(){

Log.e("Test","form java Class Test test()");}

public voidtest(inti){

Log.e("Test","form java Class Test test() i = "+ i);}

public classT{

public intt(){

Log.e("T","form java Class T t()");return666;}

}

}

/*//创建内部类,要先创建外部类实例//先找到外部类jclass clazzTest = env->FindClass("com/jninewjavaclass/Test");if(clazzTest == 0){LOGI("form c find clazzTest class error");return -1;}//找到内部类,肉部类之前要用 $jclass clazzT = env->FindClass("com/jninewjavaclass/Test$T");if(clazzT == 0){return -1;}//构造方法都是使用jmethodID javaNewTest = env->GetMethodID(clazzTest, "", "()V");if(javaNewTest == 0){LOGI("form c find javaNewTest error");return -1;}//Lcom/jninewjavaclass/Test; 构造方法为空这个也要用上,不知道为什么jmethodID javaNewT = env->GetMethodID(clazzT, "", "(Lcom/jninewjavaclass/Test;)V");if(javaNewT == 0){LOGI("form c find javaNewT error");return -1;}//先new外部类jobject classTest= env-> NewObject(clazzTest, javaNewTest);//new内部类jobject classT= env-> NewObject(clazzT, javaNewT, classTest);//找到方法jmethodID javaTest= env->GetMethodID(clazzTest, "test", "()V");//调用Test类的test方法env->CallVoidMethod(classTest, javaTest);//找到方法 有参方法jmethodID javaTest_1= env->GetMethodID(clazzTest, "test", "(I)V");//调用Test类的test有参方法env->CallVoidMethod(classTest, javaTest_1, 666);//内部类方法jmethodID javaT= env->GetMethodID(clazzT, "t", "()I");//调用Test类的t方法int return_Val = env->CallIntMethod(classT, javaT);*/

2. 报错:

1.JNI ERROR (app bug): local reference table overflow (max= 512)

这个问题坑死人了

jobject  classTest= env-> NewObject(clazzTest, javaNewTest);

如果一直ewObject 要用 env->DeleteLocalRef(classTest); 清除不然会出上面的错误。

另外 在调用Call....Method这类方法时,如果没有返回值要用CallVoidMethod,不然也出上面的错误,开始不知道,我一直调用返回值的方法,导致出上面的错误。

2..java.lang.NoSuchMethodError: no non-static method "............"

1304849341743140864.htm

964fee633e67ad14357851b78afb0714.png

我这里由于要用MediaCodec这个类,但这个类的构造方法是私有的,所以出错了,如果调用其它的类出这个错,多数是方法名或参数有误。

1304849341743140864.htm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值