首页| 论坛| 消息

标题:关于QtForAndroid中C++与Java互调的问题
作者:leamus
日期:2020-03-11 09:10
内容:

之前用C++调用Java,只需要搞清楚Java和C++的类型对应关系,和callStaticMethod之类的函数调用即可,但是Java调用C++,我在《QtOn Android 核心编程》书上看到作者说很简单,大体上是只需要定义java函数为native,然后C++定义一个多两个参数的对应函数,再关联即可,但可能Qt版本关系吧(作者用的是5.3版本,目前我用5.11和5.14),不管自己写还是用作者的例子,总是闪退,目前遇到的情况如下:
1、Qt的线程和Android主线程还不是同一个线程,所以两个线程分别应该在什么情况下使用?
2、registerNativeMethods()函数正确定义并正确返回,但调用后会导致部分C++调用Java函数闪退(如果不调用registerNativeMethods(),则没问题)。
3、Java调用Qt函数(作者的示例),调用完毕后会闪退,函数栈截取如下(这是5.14的错误,5.11的还不太一样,就是有个null 的object):
E art : JNI ERROR (app bug): accessed deleted global reference 0x2008aa
F art : art/runtime/java_vm_ext.cc:470] JNI DETECTED ERROR IN APPLICATION: use of deleted global reference 0x2008aa
F art : art/runtime/java_vm_ext.cc:470] from java.lang.String an.qt.extendsQtWithJava.ExtendsQtNative.GetQtVersion()
F art : art/runtime/java_vm_ext.cc:470] "main" prio=5 tid=1 Runnable
F art : art/runtime/java_vm_ext.cc:470] | group="main" sCount=0 dsCount=0 obj=0x759b96b8 self=0xf0a05400
F art : art/runtime/java_vm_ext.cc:470] | sysTid=27734 nice=-10 cgrp=default sched=0/0 handle=0xf381c534
F art : art/runtime/java_vm_ext.cc:470] | state=R schedstat=( 385390111 19337303 757 ) utm=21 stm=17 core=4 HZ=100
F art : art/runtime/java_vm_ext.cc:470] | stack=0xff4b4000-0xff4b6000 stackSize=8MB
F art : art/runtime/java_vm_ext.cc:470] | held mutexes= "mutator lock"(shared held)
F art : art/runtime/java_vm_ext.cc:470] native: #00..


#1 [leamus 03-12 10:32]
已解决~
#2 回 leamus 的帖子 [mugua001 12-06 21:00]
leamus:已解决~  (2020-03-12 10:32) 
解决的办法,分享一下。谢谢

回复 发表
主题 版块