简单的使用jni调用java方法

2023-05-16

jni中调用java方法分几步。先使用FindClass方法获取指定类class,在使用GetStaticMethodID方法或者GetMethodID获取静态和非静态的方法id。在使用CallObjectMethod或者CallStaticObjectMethod方法调用静态非静态方法,对于没有返回值的方法,函数为CallStaticVoidMethod形式。


jobject zoomImage(JNIEnv* env, jobject jimgo, jint width, jint height, jint hints)
{
    /* 声明局部变量 */
    jobject zoomimage;
    jmethodID jmgsi;
    jclass jimagec;

    /* 查找指定名称类 */
    jimagec = (*env)->FindClass(env, "java/awt/Image");

    /*
        获取方法id
        (III)Ljava/awt/Image;为方法参数和返回值类型
        (III)表示此方法参数为int,int,int三个参数。返回值为Ljava/awt/Image
    */
    jmgsi = (*env)->GetMethodID(env, jimagec, "getScaledInstance", "(III)Ljava/awt/Image;");
    zoomimage = (*env)->CallObjectMethod(env, jimgo, jmgsi, width, height, hints);
    return zoomimage;
}

jobject getImage(JNIEnv* env, jbyteArray buf)
{
    /* 声明局部变量 */
    jclass jcls;
    jmethodID jmid;
    jmethodID jcreateimage;
    jobject jtk;
    jobject jimgo;

    /*
        FindClass函数用于查找java类,参数为类的包名形式,不过.换成了/。
        java.awt.Toolkit 对应java/awt/Toolkit
    */
    jcls = (*env)->FindClass(env, "java/awt/Toolkit");
    if (jcls == NULL) {
        return NULL;
    }
    /*
        查找静态方法id。
        第二个参数为查找方法的类class,
        第三个参数为查找方法名称,
        第三个参数为方法参数和返回值类型。
        java中方法 public static Toolkit getDefaultToolkit()
        对应的参数和方法类型为()Ljava/awt/Toolkit;
        ()表示此方法没有参数,Ljava/awt/Toolkit为返回值类型,记住前面的L和结尾;
    */
    jmid = (*env)->GetStaticMethodID(env, jcls, "getDefaultToolkit", "()Ljava/awt/Toolkit;");

    /*
        调用静态方法,返回类型为Object。
        参数分别为:指定方法的class和获取的方法id
    */
    jtk = (*env)->CallStaticObjectMethod(env, jcls, jmid);

    /*
        获取非静态方法id
        使用和静态一样,注意这里参数类型:([B)Ljava/awt/Image;
        ([B)表示此方法的参数类型为byte[]数组,具体参数对应类型可以查找sun的jni手册
    */
    jcreateimage = (*env)->GetMethodID(env, jcls, "createImage", "([B)Ljava/awt/Image;");

    /*
        调用非静态方法,并返回Obiect对象,最后一个参数为可变参数,对应值为
        方法的参数列表。
     */
    jimgo = (*env)->CallObjectMethod(env, jtk, jcreateimage, buf);

    /* 释放局部对象*/
    (*env)->DeleteLocalRef(env, jtk);
    return jimgo;
}



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

简单的使用jni调用java方法 的相关文章

  • 判断一个数是不是质数(素数),3种方式介绍

    本文参考博文判断一个数是不是质数 素数 xff0c 3种方式介绍 xff0c 原文章解释的已经很详细 xff0c 本问增加部分博主自己的理解 一 概念介绍 质数 xff1a 质数是指在大于1的自然数中 xff0c 除了1和它本身以外不再有其
  • Ubuntu/Arm安装Mysql报错:mysql-server 依赖于 mysql-server-5.7;然而:软件包 mysql-server-5.7 尚未配置。

    报错内容如下 xff1a dpkg 依赖关系问题使得 mysql server 的配置工作不能继续 xff1a mysql server 依赖于 mysql server 5 7 xff1b 然而 xff1a 软件包 mysql serve
  • E90-DTU系列无线数传电台网关与节点4gDTU通信教程

    以E90 DTU 400SL22 ETH 与E90 DTU 400SL22 为例实现网关与节点进行数据交换 xff0c 其它频段或功率的网关 节点 xff0c 其操作方式与该视频教程一致 第一步 安装网关 为网关安装天线电源模块 第二步 调
  • STM32实现将printf重定向到串口的3种方法

    STM32实现将printf重定向到串口的3种方法 目录 STM32实现将printf重定向到串口的3种方法一 使用MicroLib重定向printf二 不使用MicroLib重定向printf三 使用标准库自定义printf 函数到串口1
  • 时钟传感器—DS3231

    时钟传感器 DS3231 DS3231概述DS3231引脚DS3231寄存器DS3231 操作 DS3231概述 DS3231是一款高精度I2C实时时钟器件内部带温度补偿 闰年补偿提供两个可编程日历闹钟提供秒 分 时 星期 日期 月 年等信
  • C语言进阶

    C语言进阶 数据操作1 数据修饰 auto static register const volatile2 大端模式 小端模式 内存操作1 动态内存管理 xff08 堆区 heap xff09 malloc calloc realloc f
  • 虚拟机VMware:由于找不到vcruntime140_1.dll,无法继续执行代码

    最近换了台新电脑 xff0c 就开始安装虚拟机VMware xff0c 就发现虚拟机开机的时候 xff0c 弹出了一个错误 xff0c 下图 于是 xff0c 百度了一下缺少vcruntime140 1 dll xff0c 如何解决 解决方
  • Linux 基础

    Linux 基础 进程1 进程查看命令 ps pstree job2 进程的状态3 进程间的关系3 1 父进程与子进程 xff0c frok vfrok 3 2 进程组3 3 会话 4 进程间通信 IPC4 1 管道 pipe4 2 信号
  • STC8A 应用知识归纳

    STC8A 应用知识归纳 串口通信串口寄存器介绍功能 定时器 计数器定时器寄存器介绍 看门狗 xff1a 复位看门狗寄存器操作 外部中断ADCADC寄存器介绍 串口通信 每个串行口有两个数据缓冲器 xff08 SBUF xff09 一个移位
  • LoRa是什么

    LoRa是什么 LoRa是什么LoRa调制LoRa调制参数LoRa WAN 网络LoRa技术框图LoRa WAN网络组成LoRa终端设备划分成A B C三类 LoRa是什么 LoRa 是LPWAN通信技术中的一种 LoRa 是美国Semte
  • LoRa模块(内置MCU),亿百特E22-400T30S,广播监听、定点传输、中继组网

    LoRa模块 xff08 内置MCU xff09 xff0c 亿百特E22 400T30S xff0c 广播监听 定点传输 中继组网 配置说明广播监听 定点传输中继组网 配置说明 工作模式 模式M1 M0模式介绍模式0 传输模式0 0串口打
  • 定位——GNSS

    GNSS GNSS 即全球导航卫星系统 xff08 Global Navigation Satellite System xff09 是所有导航定位卫星的总称 xff0c 凡是可以通过捕获跟踪其卫星信号实现定位的系统 xff0c 均可纳入G
  • 惠普zbook15g2拆机换硅脂

    前几天电脑cpu温度居高不下 xff0c 就寻思着拆机清灰 43 替换硅脂 xff0c 结果网上到处找不到惠普zbook15的完整拆机指导 xff0c 唯一可用的某论坛关于zbook17的拆机分享看着很不舒服 xff0c 于是决定自己成功后
  • Camera-LIDAR 联合标定方法总结

    项目需要融合雷达和相机 xff0c 所以要做联合标定 xff0c 记录下收集的标定方法 一 总体标定步骤 标定就是找到雷达到相机的空间转换关系 xff0c 在不同的坐标系之间转换需要旋转矩阵 R 和平移矩阵 T xff0c 为后续的雷达和相
  • 52条SQL语句性能优化策略

    1 对查询进行优化 xff0c 应尽量避免全表扫描 xff0c 首先应考虑在 WHERE 及 ORDER BY 涉及的列上建立索引 2 应尽量避免在 WHERE 子句中对字段进行 NULL 值判断 xff0c 创建表时 NULL 是默认值
  • TCP/IP四层模型及各层协议首部详述

    1 OSI七层和TCP IP四层的关系 1 1 OSI引入了服务 接口 协议 分层的概念 xff0c TCP IP借鉴了OSI的这些概念建立TCP IP模型 1 2 OSI先有模型 xff0c 后有协议 xff0c 先有标准 xff0c 后
  • 位域的定义和使用

    位域 xff1a 有些信息在存储时 xff0c 并不需要占用一个完整的字节 xff0c 而只需占几个或一个二进制位 例如在存放一个开关量时 xff0c 只有0和1 两种状态 xff0c 用一位二进位即可 为了节省存储空间 xff0c 并使处
  • Makefile 的运行(六)

    一般来说 xff0c 最简单的就是直接在命令行下输入make命令 xff0c make命令会找当前目录的makefile来执行 xff0c 一切都是自动的 但也有时你也许只想让make重编译某些文件 xff0c 而不是整个工程 xff0c
  • FreeRTOS 任务优先级说明

    freeRTOS任务优先级与Unix进程优先级不同 FreeRTOS 任务优先 xff1a 任务优先级数值越小 xff0c 任务优先级越低 Unix 任务优先 xff1a 进程优先级数值越小 xff0c 进程优先级越高 下面对 FreeRT
  • QT子线程读取串口数据并传到主线程

    转载 读取串口部分借鉴于Quartz010的文章 如何在QT中读取串口数据 http blog csdn net zz709196484 article details 66474917 这是博客网址 大致思路就是子线程去读取串口数据并传送

随机推荐

  • 最常用的Java库一览

    一个典型的Java项目依赖于第三方库 本文总结的Java库适用于各种应用 xff0c 比较流行并且广泛使用 其中一些还提供简单的示例 xff08 来自ProgramCreek xff09 Java SDK 肯定是使用最广的库 xff0c 所
  • C#Socket编程详解(一)TCP与UDP简介

    一 TCP与UDP 1 TCP 1 1 定义 TCP xff08 TransmissionControl Protocol xff09 传输控制协议 是一种可靠的 面向连接的协议 xff08 eg 打电话 xff09 传输效率低全双工通信
  • AD19导出bom表的方法(按照元件不同数值分类,重点信息突出)

    我画电路图用的是AD19的软件 xff0c 最后板子画好了要进行元器件采购要生成bom表 xff0c 查了一下相关的资料 xff0c 总结整理一下 xff1a 1 在报告 xff08 report xff09 打开Bill of Mater
  • 为什么c++要“在头文件中声明,在源文件中定义”?

    gt gt gt 搬运一个知乎问答 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 下面是回答 61 61 61 61 61 61 61 61 61 61 61 61 61
  • HTTP header 参数丢失情况分析以及解决防范

    HTTP header 参数丢失情况分析以及解决防范 1 问题 当项目有Nginx做了代理的时候 xff0c 请求头中传参 34 user ip 34 xff0c 接口接收不到 2 问题分析 默认nginx是不能转发带 的header信息的
  • Keil 调试局部变量查看显示not in scope

    调整优化级别 不同的优化级别允许您在编译代码中可用的调试信息级别与代码性能之间进行权衡 可以使用以下优化级别 xff1a o O0应用最小优化 大多数优化都被关闭 xff0c 生成的代码具有最佳的调试视图 o O1应用受限优化 例如 xff
  • 【32单片机学习】(6)STM32串口+DMA收发不定长数据

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 目录 前言 1 DMA介绍 2 串口接收数据 3 实验现象 1 实验电路图 2 串口收发不定长数据视频演示 3 OLED 显示接收数据 4
  • www-authenticate认证过程浅析

    文档 xff1a www authenticate认证过程简单研究 创建 xff1a http hi baidu com netee 日期 xff1a 2009 10 07 版权 xff1a 原创内容 xff0c 转载请注明出处 xff0c
  • STM32F407ZG 串口通信+固定帧头帧尾传输数据帧

    STM32F407ZG开发板学习 xff08 4 xff09 串口简介通信接口USART接线电平标准数据帧 实验 xff1a 固定帧头帧尾数据传输需求最终思路以及思考过程思路中断函数程序段长度的问题缓冲区数据结构的决定 初始化配置中断服务函
  • 基于杰理RTOS平台的433射频无线数传通信

    在杰理的AC7916N实现了433射频的数据发送 xff0c 在杰理的AD15系列实现433射频接收 xff0c 本代码用于门铃项目收发 xff0c 下面请看代码 首先是AC7916N的433数据发送代码 xff0c 发送部分的程序放在一个
  • boost简介

    我认为做为一名c 43 43 编程人员 xff0c 对boost库必须要有一定的了解与使用 这对于代码的整洁和效率有很大的帮助 借着这个机会整理一下使用boost库的经验 xff0c 顺便再学习一下 首先 xff0c 什么是boost库 b
  • Android上增加对M3U8文件下载的功能

    最近给一个客户提了一个需求 xff0c 想对他们网站的视频做一个下载的功能 xff0c 希望他的App能够缓存视频功能 xff0c 然后用户可以在下次快速播放视频 一开始接到这个需求 xff0c 自然是去搜罗一遍 xff0c 有没有可靠稳定
  • VLC自定义m3u8协议片段加密方式

    hls xff08 m3u8 xff09 本身有一套自己的加密方式 xff0c 可以保证片段是安全的 但是本身在传输的过程中加密key请求容易被截获 xff0c 这样存在一点片段key被截取的风险 xff0c 截取者就可以根据片段和key重
  • Fragment里使用CordovaWebView

    因为CordovaWebView 默认的初始化里判断了Content是不是继承CordovaInterface xff0c 如果直接使用Fragment继承CordovaInterface xff0c CordovaInterface有个抽
  • CMake教程(二)- 添加静态库文件和动态库文件

    CMake教程 xff08 二 xff09 添加静态库文件和动态库文件 什么是库文件静态链接库动态链接库静态库和动态库的区别 如何在CMake中添加库文件CMake 中 target link libraries 的 PRIVATE xff
  • jtextpane的使用方法

    jtextpane是java swing中的一个组件 xff0c 是一个可以编辑和显示html xff0c rtf和普通文本的富文本组件 xff0c jtextpane是根据使用EditorKit来显示内容的 xff0c 目前jtextpa
  • win32sdk学习 richedit实现的一个简单记事本

    记录的源文件 xff0c 篇幅有点长 工具栏资源图片 bmp格式 notepad h文件 NOTEPAD H INCLUDED Copyright C name xff1a notepad author xff1a suju 日期 xff1
  • jquery的date input日期组件使用

    jquery的date input日期选择控件 xff0c 在一些日期表单上使用 xff0c 效果还是比较好的 官方介绍和下载地址 http jonathanleighton com projects date input 使用前需要导入j
  • ProgressBar的简单使用

    ProgressBar滚动体在安卓程序中使用也计较多 ProgressBar的几个常用属性和方法 android max 61 34 200 34 滚动条最大值 android progress 61 34 0 34 滚动条当前值 andr
  • 简单的使用jni调用java方法

    jni中调用java方法分几步 先使用FindClass方法获取指定类class xff0c 在使用GetStaticMethodID方法或者GetMethodID获取静态和非静态的方法id 在使用CallObjectMethod或者Cal