JNI DETECTED ERROR IN APPLICATION: use of invalid jobject 0x1388

遇到这个错让人很头疼,字面上的意思就是说你传进来的对象是无效的,这个就很难理解了,要么是null,要么就是好的,无效怎么解释?先不管了,用debug模式来运行应用,会大概定位到出错的地方

图一:

对照着上图来跟这个问题
途中标1的地方告诉我们再调jni里面的GetIntField的方法是出了错(但是,这只是表面现象,是不准确的,但是能打给定位大出错的位置,我们先记住obj的这个0x00001388值,接下来我们看标2的地方,这是方法调用的进栈顺序,对于我们有用的就两行,我们点击下面那一行会定位到出错的位置,如下图:

图二:

标1的地方就是jni提示我们崩的地方,但是,我经过上上下下,反反复复的检查也没检查出来这个方法我传的这个jVideoStreamFormat参数有什么问题,为什么我要找jVideoStreamFormat这个参数而不是其他地方呢,以往的经验告诉我,jni的报错在debug模式下定位的并不十分准确,我只能在他定位的地方周围的变量都翻一遍,图一中我们看到报错的obj的hash值是0x00001388,我们看到标2的地方,hash的只是一样的,那我就确定了,是jVideoStreamFormat这个值有问题,但是问题在哪呢,这时我注意到了标3和4的地方,jAudioStreamFormat这个值为null,startTime和endTime的值为0,这就不可能了,这俩值是我在同一个地方new的:

图三:

确实没得问题,这下不是一个问题了,这些参数的值怎么都乱了,顿时想面壁!
我在短暂的冷静之后又重新从头到尾的捋了一遍,从定义函数的地方
图四:

再到jni里注册函数:
图五(由于方法签名太长,所以截成了两张:


这里我把三处地方都做了对比,终于有了新发现,我在java里定义的native方法的参数类型,startTime 和 endTime是long类型的(图四),但是在jni那层里实现的却是jint类型(图二),于是我把jni层的代码函数参数改成jlong类型的再次运行,

没有出错,oh,Mygod!真是一次惨痛的教训,我们平时在java里long类型转int类型,编辑器都会提示我们强转类型,或者改变类型,但是在传往jni的路上可没人会提醒你,只能自己小心了

记一次jin开发遇到的很欲哭无泪的报错相关推荐

  1. 记一次线上环境 redis偶尔连接超时报错 解决

    记一次线上环境 redis偶尔连接超时报错 解决 贴出本地控制台日志 说实话,很痛苦,跟进很久了,一直认为的jvm程序所使用的配置的连接池框架问题 因为程序为 springboot 2 spring ...

  2. Xamarin开发安装Visual Studio 2015 update2报错的解决办法

    Xamarin开发安装Visual Studio 2015 update2报错的解决办法 错误信息:update 2 requires a member of the visual studio 20 ...

  3. 工作214:结构 vue操作一个很有意思的报错 [Vue warn]: You may have an infinite update loop in a component

    结构 vue操作一个很有意思的报错 [Vue warn]: You may have an infinite update loop in a component render function. 代 ...

  4. VsCode配置Python开发环境后运行代码会报错“无法加载文件 D:\Code\xxx\poetry-demo\.venv\Scripts\Activate.ps1”

    问题描述:在VsCode中配置Python开发环境后运行代码会报错"无法加载文件 D:\Code\xxx\poetry-demo\.venv\Scripts\Activate.ps1&quo ...

  5. 嵌入式linux开发,对pcf8563时钟操作报错:rtc-pcf8563 0-0051: low voltage detected, date/time is not reliable.

    一.问题描述. 嵌入式linux开发,对pcf8563时钟操作报错如下: [root@ms ~]# hwclock -s rtc-pcf8563 0-0051: low voltage detecte ...

  6. 记一次Java代码不执行,也不报错!求大佬赐教!

    记一次Java代码不执行,也不报错!求大佬赐教! 发生背景 问题所在 发生背景 实训在做串口通讯的时候,进行数据处理时,代码执行一部分,有一部分没有执行. 十分纳闷,代码如下: /*** 处理返回结果 ...

  7. 嵌入式Linux开发,Ubuntu22下交叉编译内核报错: multiple definition of `yylloc‘; scripts/dtc/dtc-lexer.lex.o:(.bss+0x0

    一.问题描述 嵌入式Linux开发,Ubuntu22下交叉编译内核报错: /usr/bin/ld: scripts/dtc/dtc-parser.tab.o:(.bss+0x10): multiple ...

  8. 安卓开发——android8.0应用崩溃,报错: Only fullscreen opaque activities can request orientation

    上周末升级了最新的MIUI 8.1.18开发版,早早的吃上了奥利奥 Android O(虽然在miui下并没有什么变化(-_-),但还是很开心的,毕竟我的小米MIX2终于可以用到了之前只是内测的全屏手 ...

  9. VS远程开发(远程调试)编译报错:对‘xxx’未定义的引用(设置库依赖顺序)(已解决)pthread(项目-->属性-->链接器-->输入-->库依赖项)

    如图在VS中对linux进行远程开发时,编译报错: 貌似是因为在代码中使用了pthread.h的函数,链接库依赖顺序出了问题,我在ubuntu里手动使用gcc main.c -lpthread -o ...

最新文章

  1. UVA11464偶数矩阵
  2. 【网站开发必备】——12款响应式 Lightbox(灯箱)效果插件
  3. kubenetes平台监控cAdvisor查看
  4. 打造自己的 PTM!新词挖掘+预训练
  5. MQTT 消息通信工具使用
  6. ios safari 模拟器_iOS 模拟器调试大法了解一下?
  7. DDos防护系列之2--DDos防御策略
  8. c语言输出最大的数ns流程图_图8循环结构的NS流程图.ppt
  9. URAL1325-Dirt
  10. jsp中打开新的html网页,jsp中用window.open()打开新页面的相关设置
  11. Android 继承于PopuWindow的自定义弹出窗体
  12. 阿里视频云web播放器常见问题汇总
  13. Redis管道技术的使用
  14. 【Android Studio】Android Studio 搭建开发环境(Linux Ubuntu篇)
  15. 软件测试工程师必备技能——Linux基础知识
  16. 第一个PWA程序-聊天室
  17. 操作系统课程设计——Shell编程(用c编写一个Linux的外壳Shell)
  18. 计算机教学研讨会方案,临沂大学信息学院计算机教学红色文化教育研讨会实施方案.doc...
  19. 15天精读掌握《高德纳_具体数学》 第7天 2019.6.3
  20. Register Form

热门文章

  1. 建一个网站需要花多少钱?
  2. el-select如何选择整个对象item
  3. 绿幕虚拟直播,直播时代的风口
  4. Linux内核模块it87出错
  5. (Alpha)Let's-展示博客
  6. 强大的MATLAB机器人工具箱Matlab_Robotic_Toolbox_v9.8及教程
  7. 科技云报道:5G商用倒计时,你关心的都在这儿
  8. 一个Android应届生从上海离职,面试建议
  9. 初学者怎样学好Java
  10. 微信小程序计算两个日期之间相差几天