Qt Android Native Error: JNI DETECTED ERROR IN APPLICATION: java_object == null

开发的qt android程序在低版本上运行正常,在高版本上启动时崩溃,报如下错误

W  java.lang.RuntimeException: Can't create handler inside thread Thread[qtMainLoopThread,5,main] that has not called Looper.prepare()at android.os.Handler.<init>(Handler.java:227)at android.os.Handler.<init>(Handler.java:129)at android.app.Activity.<init>(Activity.java:980)at org.qtproject.qt.android.bindings.QtActivity.<init>(QtActivity.java:67)at cn.pubwell.cons.ConsQtActivity.<init>(ConsQtActivity.java:58)at org.qtproject.qt.android.QtNative.startQtApplication(Native Method)at org.qtproject.qt.android.QtNative$7.run(QtNative.java:465)at org.qtproject.qt.android.QtThread$1.run(QtThread.java:25)at java.lang.Thread.run(Thread.java:1012)
A  java_vm_ext.cc:591] JNI DETECTED ERROR IN APPLICATION: java_object == nulljava_vm_ext.cc:591]     in call to GetObjectClassjava_vm_ext.cc:591]     from void org.qtproject.qt.android.QtNative.startQtApplication()
D  Compat change id reported: 171228096; UID 10317; state: ENABLED
D  Compat change id reported: 193247900; UID 10317; state: DISABLED
A  runtime.cc:691] Runtime aborting...runtime.cc:691] Dumping all threads without mutator lock heldruntime.cc:691] All threads:runtime.cc:691] DALVIK THREADS (42):runtime.cc:691] "main" prio=10 tid=1 Runnableruntime.cc:691]   | group="" sCount=0 ucsCount=0 flags=0 obj=0x71d226c0 self=0xb4000072732e8c00runtime.cc:691]   | sysTid=22682 nice=-10 cgrp=top-app sched=0/0 handle=0x72749274f8runtime.cc:691]   | state=R schedstat=( 613865508 70633029 567 ) utm=50 stm=11 core=6 HZ=100runtime.cc:691]   | stack=0x7fd5ccc000-0x7fd5cce000 stackSize=8188KBruntime.cc:691]   | held mutexes= "mutator lock"(shared held)runtime.cc:691]   native: #00 pc 0056f570  /apex/com.android.art/lib64/libart.so (art::DumpNativeStack+176) (BuildId: 43f5b252fbfc41f385c66b6a496e3d08)runtime.cc:691]   native: #01 pc 0068ffa8  /apex/com.android.art/lib64/libart.so (art::Thread::DumpStack const+344) (BuildId: 43f5b252fbfc41f385c66b6a496e3d08)runtime.cc:691]   native: #02 pc 006ae5a8  /apex/com.android.art/lib64/libart.so (art::DumpCheckpoint::Run+920) (BuildId: 43f5b252fbfc41f385c66b6a496e3d08)runtime.cc:691]   native: #03 pc 00690f0c  /apex/com.android.art/lib64/libart.so (art::Thread::RunCheckpointFunction+188) (BuildId: 43f5b252fbfc41f385c66b6a496e3d08)runtime.cc:691]   native: #04 pc 002a4534  /apex/com.android.art/lib64/libart.so (art::Thread::CheckSuspend+64) (BuildId: 43f5b252fbfc41f385c66b6a496e3d08)runtime.cc:691]   native: #05 pc 00286b74  /apex/com.android.art/lib64/libart.so (art::ClassLinker::InitializeClass+1128) (BuildId: 43f5b252fbfc41f385c66b6a496e3d08)runtime.cc:691]   native: #06 pc 00266518  /apex/com.android.art/lib64/libart.so (art::ClassLinker::EnsureInitialized+164) (BuildId: 43f5b252fbfc41f385c66b6a496e3d08)runtime.cc:691]   native: #07 pc 00236018  /apex/com.android.art/lib64/libart.so (void art::interpreter::ExecuteSwitchImplCpp<false>+35964) (BuildId: 43f5b252fbfc41f385c66b6a496e3d08)runtime.cc:691]   native: #08 pc 00229bd8  /apex/com.android.art/lib64/libart.so (ExecuteSwitchImplAsm+8) (BuildId: 43f5b252fbfc41f385c66b6a496e3d08)runtime.cc:691]   native: #09 pc 0014dd26  /data/dalvik-cache/arm64/product@app@WebViewGoogle64@WebViewGoogle64.apk@classes.vdex (com.android.webview.chromium.WebViewChromiumFactoryProvider.addWebViewAssetPath)runtime.cc:691]   native: #10 pc 003db018  /apex/com.android.art/lib64/libart.so (art::interpreter::Execute +452) (BuildId: 43f5b252fbfc41f385c66b6a496e3d08)runtime.cc:691]   native: #11 pc 003e19b8  /apex/com.android.art/lib64/libart.so (art::interpreter::ArtInterpreterToInterpreterBridge+104) (BuildId: 43f5b252fbfc41f385c66b6a496e3d08)runtime.cc:691]   native: #12 pc 003e2538  /apex/com.android.art/lib64/libart.so (bool art::interpreter::DoCall<false>+1760) (BuildId: 43f5b252fbfc41f385c66b6a496e3d08)runtime.cc:691]   native: #13 pc 00230a58  /apex/com.android.art/lib64/libart.so (void art::interpreter::ExecuteSwitchImplCpp<false>+14012) (BuildId: 43f5b252fbfc41f385c66b6a496e3d08)runtime.cc:691]   native: #14 pc 00229bd8  /apex/com.android.art/lib64/libart.so (ExecuteSwitchImplAsm+8) (BuildId: 43f5b252fbfc41f385c66b6a496e3d08)runtime.cc:691]   native: #15 pc 00150408  /data/dalvik-cache/arm64/product@app@WebViewGoogle64@WebViewGoogle64.apk@classes.vdex (com.android.webview.chromium.WebViewChromium.<init>)runtime.cc:691]   native: #16 pc 003db018  /apex/com.android.art/lib64/libart.so (art::interpreter::Execute +452) (BuildId: 43f5b252fbfc41f385c66b6a496e3d08)runtime.cc:691]   native: #17 pc 003e19b8  /apex/com.android.art/lib64/libart.so (art::interpreter::ArtInterpreterToInterpreterBridge+104) (BuildId: 43f5b252fbfc41f385c66b6a496e3d08)runtime.cc:691]   native: #18 pc 003e2538  /apex/com.android.art/lib64/libart.so (bool art::interpreter::DoCall<false>+1760) (BuildId: 43f5b252fbfc41f385c66b6a496e3d08)runtime.cc:691]   native: #19 pc 00230a58  /apex/com.android.art/lib64/libart.so (void art::interpreter::ExecuteSwitchImplCpp<false>+14012) (BuildId: 43f5b252fbfc41f385c66b6a496e3d08)

网络上没有查找到有用信息,最终通过二分法找到了错误代码

...
QJniEnvironment env;
QJniObject javaClass("com/example/ExampleActivity"); // 使用findclass似乎也有同样的问题
jobject objAct = qObjAct.object<jobject>();
jclass objectClass = env->GetObjectClass( objAct );
...
env->RegisterNatives(objectClass,methods,sizeof(methods) / sizeof(methods[0]));
...

上面的注册方式有问题,应当使用如下方式

    ...QJniEnvironment env;jclass objectClass = env->GetObjectClass(javaClass.object<jobject>());QJniObject qObjAct = QJniObject::callStaticObjectMethod(             "com/example/ExampleActivity","getContext","()Landroid/content/Context;");if (!qObjAct.isValid()){return ;}jobject objAct = qObjAct.object<jobject>();jclass objectClass = env->GetObjectClass( objAct );env->RegisterNatives(objectClass,methods,sizeof(methods) / sizeof(methods[0]));...

其中getContext为com/example/ExampleActivity.java的静态获取context函数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/47658.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用Python调用颜值评分接口

引言 在当今社会&#xff0c;人工智能技术被应用于各个领域&#xff0c;包括图像识别和分析。今天&#xff0c;我们将利用Python来调用小思框架颜值评分接口&#xff0c;该接口可以接收一张人脸图片&#xff0c;并返回一个表示颜值水平的分数。 接口功能与参数 方法URL参数描…

PiT : 基于池化层Pooling layer的Vision Transformer

CNN的降维原理;随着深度的增加,传统CNN的通道维数增加,空间维数减少。经验表明,这样的空间降维对变压器结构也是有益的,并在原有的ViT模型的基础上提出了一种新的基于池的视觉变压器(PiT)。 1. 引言 ViT与卷积神经网络(CNN)有很大的不同。将输入图像分成1616小块馈送到变压…

C++ 匹配并提取包括加中括号的日期时间的正则表达式

在C中&#xff0c;你可以使用std::regex库来匹配包含日期和时间的字符串。以下是一个简单的例子&#xff0c;它展示了如何使用正则表达式来匹配形如[YYYY-MM-DD HH:MM:SS]的字符串。include <iostream> #include <string> #include <regex> int main() { …

学懂C#编程:精通C#、.NET开发之核心编程知识学习指南

无论你是编程新手&#xff0c;还是想要深化.NET技能的开发者&#xff0c;本文都将为你提供一条清晰的学习路径&#xff0c;从C#基础到高级特性&#xff0c;每一站都配有详尽解析和实用示例&#xff0c;旨在帮助你建立坚实的知识体系&#xff0c;并激发你对C#及.NET生态的热情。…

LabVIEW软件开发的雷区在哪里?

在LabVIEW软件开发中&#xff0c;有几个需要注意的雷区&#xff0c;以避免常见的错误和提高开发效率&#xff1a; 1. 不良的代码结构 雷区&#xff1a;混乱的代码结构和不清晰的程序逻辑。 后果&#xff1a;导致难以维护和调试的代码&#xff0c;增加了错误和故障的风险。 …

Web3时代的教育技术革新:智能合约在学习管理中的应用

随着区块链技术的发展和普及&#xff0c;Web3时代正在为教育技术带来前所未有的革新和机遇。智能合约作为区块链技术的核心应用之一&#xff0c;不仅在金融和供应链管理等领域展示了其巨大的潜力&#xff0c;也在教育领域中逐渐探索和应用。本文将探讨智能合约在学习管理中的具…

【C++】前缀和:和为K的子数组

1.题目 2.算法 需要借助哈希表&#xff08;查找效率很高&#xff09;。 如果一个区间和为sum&#xff0c;如果它的前缀和为sum-k&#xff0c;那么后缀和一定是K。 3.代码

类与对象(3)

对于类的构造函数我们已经有了初步的了解&#xff0c;这里我们对其拷贝构造函数进行讲解&#xff1a; 目录 拷贝构造函数&#xff1a; 1.拷贝构造函数的作用&#xff1a; 2.系统生成拷贝构造函数的缺陷 3.深拷贝的实现 侧面体现 拷贝构造函数&#xff1a; 这里我们将拷贝…

小程序-模板与配置

一、WXML模板语法 1.数据绑定 2.事件绑定 什么是事件 小程序中常用的事件 事件对象的属性列表 target和currentTarget的区别 bindtap的语法格式 在事件处理函数中为data中的数据赋值 3.事件传参与数据同步 事件传参 &#xff08;以下为错误示例&#xff09; 以上两者的…

Java语言程序设计基础篇_编程练习题**14.29(游戏:豆机)

第十四章第二十九题 **14.29 (游戏&#xff1a;豆机) 请写一个程序&#xff0c;显示编程练习题 7.21 中介绍的豆机&#xff0c;如图 14-52c 所示 代码展示 package chapter_14;import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.layou…

NFS存储、API资源对象StorageClass、Ceph存储-搭建ceph集群和Ceph存储-在k8s里使用ceph(2024-07-16)

一、NFS存储 注意&#xff1a;在做本章节示例时&#xff0c;需要拿单独一台机器来部署NFS&#xff0c;具体步骤略。NFS作为常用的网络文件系统&#xff0c;在多机之间共享文件的场景下用途广泛&#xff0c;毕竟NFS配置方 便&#xff0c;而且稳定可靠。NFS同样也有一些缺点&…

java基础学习:序列化之 - ObjectMapper

文章目录 一、介绍二、主要功能三、使用方法官网&#xff1a; 一、介绍 ObjectMapper 是 Jackson 库中的一个核心类&#xff0c;用于在 Java 对象和 JSON 数据之间进行转换。Jackson 是一个流行的 Java 库&#xff0c;用于处理 JSON 数据。它提供了灵活的方式来序列化和反序列…

Laravel Passport:API认证的瑞士军刀

Laravel Passport&#xff1a;API认证的瑞士军刀 在现代Web应用中&#xff0c;API的安全认证是一个核心问题。Laravel Passport提供了一个全面的解决方案&#xff0c;用于构建OAuth2.0认证服务器。它使得API的认证变得简单而强大&#xff0c;支持多种认证方式&#xff0c;包括…

使用Python批量压缩图片

当涉及到处理大量图片并确保它们符合特定大小要求时&#xff0c;Python 中的 PIL 库&#xff08;现在称为 Pillow&#xff09;提供了强大的工具。本文将详细介绍如何利用 Python 和 Pillow 库编写一个批量压缩图片的程序&#xff0c;以及如何将这些图片保存到指定目录中。 介绍…

Postgresql主键自增的方法

Postgresql主键自增的方法 一.方法&#xff08;一&#xff09; 使用 serial PRIMARY KEY 插入数据 二.方法&#xff08;二&#xff09; &#x1f388;边走、边悟&#x1f388;迟早会好 一.方法&#xff08;一&#xff09; 使用 serial PRIMARY KEY 建表语句如下&#xf…

什么是变量提升

文章目录 发现宝藏变量提升的定义变量提升的类型变量提升的示例函数声明提升的示例注意事项 发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【宝藏入口】。 变量提升&#xff08;Hoisting&…

住宅IP解析:动态住宅IP和静态住宅IP区别详解

在互联网连接的世界中&#xff0c;IP地址是我们识别和访问网络资源的关键。住宅IP地址&#xff0c;特别是动态住宅IP和静态住宅IP&#xff0c;是两种不同类型的IP分配方式&#xff0c;它们在使用和功能上存在显著差异。 1. IP地址的稳定性 动态住宅IP&#xff1a;这种IP地址是…

mysql命令练习

创建数据表grade: CREATE TABLE grade( id INT NOT NULL&#xff0c; sex CHAR(1)&#xff0c; firstname VARCHAR(20) NOT NULL&#xff0c; lastname VARCHAR(20) NOT NULL&#xff0c; english FLOAT&#xff0c; math FLOAT, chinese FLOAT )&#xff1b; 向数据表grade中插…

[职场] MARKETINGSPECIALIST是什么 #笔记#微信#知识分享

MARKETINGSPECIALIST是什么 MARKETINGSPECIALIST&#xff0c;即市场营销专员&#xff0c;他们需要具备一定的专业知识和技能&#xff0c;以适应快速变化的市场环境。接下来&#xff0c;我们将详细探讨这个职位的工作内容、必备技能以及发展前景。 一、MARKETINGSPECIALIST是什么…

lua 游戏架构 之 LoaderWallet 异步加载

定义了一个名为LoaderWallet class&#xff0c;用于管理资源加载器&#xff08;Loader&#xff09;。这个类封装了资源加载的功能&#xff0c;包括异步加载&#xff0c;以及资源的释放和状态查询。下面是对代码的详细解释&#xff1a; ### 类定义和初始化 这里定义了一个名为…