jni回调静态java方法,java代码不执行的问题

今天遇到了一个奇怪的问题,在这儿记录下

问题现象:

做jni开发,在c层回调java的静态方法,发现**java代码没有执行**,但是CallStaticVoidMethod 成功返回,且c层的代码接着的流程执行没有任何问题,重要的是**没有报任何错误或异常**,**就好象java代码根本就没有回调一样**,十分奇怪。
还有就是应用启动后,前几次的回调都没有问题,之后从某次开始,就一直出问题了。
这些现象都是我加了log之后发现的。

我是如何解决的呢?

1,先是怀疑回调的方式不对,由于回调部分是在新开的线程里,怀疑与线程有关,然而并不是这个原因;
2, 再观察log发现,这个问题都是在回调了相同参数后才出现的,然后在对应的java代码里有一个回调listener, 问题就出在这个回调listener上,因为这个listener对象为null,一但回调执行了这里,之后会导致整个java回调无作用。然后加了一个空指针的判断,问题解决。

总结

    这次问题的奇怪之处在于jni的回调过程中,遇到空指针没有抱任何异常(按道理,一般都有runtimeException的),所以难以定位到原因。
    结合以往经历,发现凡是随机的,莫名其妙,难以解释的bug之类,都可以往初始化上考虑下;以前有写一段校验的代码,跑起来后发现每次校验结果都不一样,总是在想是不是校验的步骤写错了,最后才发现是声明的int变量没有赋初值,导致结果是随机的。

      总之要注重**变量的初始化**,这是个好习惯!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值