JNI 访问Java的属性

news/2025/1/14 10:05:55/文章来源:https://www.cnblogs.com/plus301/p/18669275

在JNI中访问Java对象的属性,通常需要先获取属性的jfieldID,然后使用相应的函数进行读写操作。

1、访问非静态属性

例1:

//Java代码
public
class MyClass {private int mValue;public MyClass(int value) {mValue = value;} }
#include <jni.h>
#include <iostream>// 假设JNIEnv* env和jobject obj已经被正确设置// 1. 加载Java类
jclass clazz = env->FindClass("com/example/MyClass");// 2. 获取属性的jfieldID
jfieldID fieldID = env->GetFieldID(clazz, "mValue", "I");// 3. 读取属性值
jint value = env->GetIntField(obj, fieldID);
std::cout << "Read value: " << value << std::endl;// 4. 设置属性值
jint newValue = value + 1;
env->SetIntField(obj, fieldID, newValue);
std::cout << "New value set: " << newValue << std::endl;// 5. 释放本地引用
env->DeleteLocalRef(clazz);

例2:

//Java代码
public String key = "key"; public native String accessField();
JNIEXPORT jstring JNICALL Java_JniMain_accessField(JNIEnv * env, jobject jobj) 
{
//1.获取jclasssjclass jclz = (*env)->GetObjectClass(env,jobj);//2.fieldId key:属性名称, Ljava/lang/String:属性签名jfieldID fid = (*env)->GetFieldID(env,jclz,"key","Ljava/lang/String;");//3.得到key 对应的值//GetXXXField 因为String 是引用类型 所以使用GetObjectFieldjstring jstr = (*env)->GetObjectField(env,jobj,fid);//4.将jni的string 转换成C的charchar * c_str = (*env)->GetStringUTFChars(env,jstr,NULL);//5.生成新的字符串 HBin keychar text[30] = "HBin";stract(text,c_str);//6.C->jnijstring new_str = (*env)->NewStringUTF(env,text);//7.使用set方法(env)-SetObjectField(env,jobj,fid,new_str);//释放(*env)->ReleaseStringChars(env,new_str,c_str);return new_str; }

 2、访问静态属性

例1:

//Java代码
public static int count = 9;
public native void accessStaticField();
//访问静态域还是使用jobject的参数 范围静态函数才是使用jclass的参数
JNIEXPORT void JNICALL Java_JniMain_accessStaticField(JNIEnv * env, jobject jobj) 
{//1.获取jclasssjclass jclz = (*env)->GetObjectClass(env, jobj);//2.得到fieldId  count:属性名称, I:属性签名jfieldID fid = (*env)->GetFieldID(env, jclz, "count", "I");jint count = (*env)->GetStaticIntField(env, jclz, fid);//int 不需要转换可以直接使用count++;(env)->SetStaticIntField(env, jclass, fid, count);}

 

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

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

相关文章

傅里叶级数

傅里叶级数 转自 https://zhuanlan.zhihu.com/p/609597010傅里叶级数的公式: 其中: 为了积分方便,积分区间一般设为[-π, π],也相当一个周期T的宽度。 1、把一个周期函数表示成三角级数:首先,周期函数是客观世界中周期运动的数学表述,如物体挂在弹簧上作简谐振动、单…

旅游巴士

旅游巴士一看题啥也不会 注意到数据点范围,发现有特殊性质 ai=0 ,也就是说,每个景点没有时间限制,所以在分层图上跑BFS最短路就行了。设 dis[i][j] 为到第 i 个点时,在时刻 t 时刻到达,记录为 t mod k=j,分为 j 层。 考虑正解,假设现在到达了 u 号点,在 t 时刻,要去往…

VS2022 安装 .NET Framework 4.0 和 .NET Framework 4.5 的方法

前言2022年5月27日,刚刚把VS2019升级到了VS2022,安装时已经不提供.NET Framework 4.0和.NET Framework 4.5的目标框架了,打开VS也提示不支持目标框架。 解决方法1、下载.NET Framework框架.NET Framework 4.5.2.NET Framework 4.5.1.NET Framework 4.5.NET Framework 4.0备…

《ESP32-S3使用指南—IDF版 V1.6》第二章 常用的C语言知识点

第二章 常用的C语言知识点 1)实验平台:正点原子DNESP32S3开发板 2)章节摘自【正点原子】ESP32-S3使用指南—IDF版 V1.6 3)购买链接:https://detail.tmall.com/item.htm?&id=768499342659 4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/esp…

Avalonia 简单实现输入法光标跟随效果

本文将告诉大家如何在 Avalonia 里面实现输入法光标跟随效果本文是在 11.1.0 的 Avalonia 版本里面实现效果 本文内容里面只给出关键代码片段,如需要全部的项目文件,可到本文末尾找到本文所有代码的下载方法 核心是编写一个类型,让这个类型继承 TextInputMethodClient 类。然…

【一文详解】解决跨网文件传输三大瓶颈 选择专业文件摆渡系统

在数字化办公日益普及的今天,跨网文件传输成为许多企业面临的技术瓶颈。传统的文件传输方式往往无法满足跨地域、跨网络环境中的需求,尤其是随着数据量的增大和传输频率的提高,企业在进行文件交换时频繁遇到速度慢、安全性差、稳定性差等问题。因此,选择一款专业的文件摆渡…

SecureCRT v9.5.2 for Mac SSH终端操作工具

SecureCRT v9.5.2 for Mac SSH终端操作工具 安装 介绍 SecureCRT Mac是一款SSH终端工具,为计算专业人士提供高级会话管理工具。也是一个功能强大且值得信赖的基于GUI的SHH和Telnet客户端,以及旨在提高工作效率并简化重复任务的终端仿真器。借助SecureCRT mac版的帮助,您可以…

Gitlab流水线配置

由于格式和图片解析问题,为了更好阅读体验可前往 阅读原文流水线的流程是,提交代码后,gitlab会检测项目根目录里的.github-ci.yml文件,根据文件中的流水线自动构建,配置文件格式正确性可以在gitlab进行文件校验,格式使用yaml文件格式,一个yaml文件就是一个流水线,里面会…

验证表单输入:必填域

问题 希望确保必须为一个表单元素提供一个值。例如,希望保证一个文本框不为空。 解决方案 使用filter_has_var()查看这个元素在相应的输入数组中是否存在。 严格表单验证 // 检查POST请求中是否存在first_name字段,并且这个字段的长度大于0 if(!(filter_has_var(INPUT_POST, …

[2025.1.13 JavaSE学习]集合-7(Hashtable Properties)

Hashtable 特点和HashMap处于同一级,实现了Map接口,继承了Dictionary类 Hashtable的key和value都不能为null,否则会抛出NullPointException 是线程安全的,带有synchronized修饰扩容机制底层有数组Hashtable$Entry[ ],初始化大小为11 临界值threshold为8 = 11/* 0.75 而后按…

Ansible工具集使用指南

作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 目录一.ansible相关的工具概述1.查看ansible相关的工具2.本质上是一个Python脚本文件二.ansible-doc工具使用指南1 ansible-doc查看ansible文档2.列出支持的模块列表3.过滤出指定模块4.列出指定类型模块5.显示…

网络云服务

一、网络服务介绍 网络是指多个计算机或其他设备连接在一起,以便它们可以互相通信和共享资源的系统。 网络可以是局域网(Local Area Network,LAN)、广域网(Wide Area Network,WAN)或互联网(Internet)等不同类型。 华为云拥有丰富的网络服务,提供安全、可扩展的云上网…