JAVA JNI原理详细介绍及简单实例代码
发布时间 - 2026-01-10 21:53:29 点击率:次JAVA JNI原理

JNI是JAVA标准平台中的一个重要功能,它弥补了JAVA的与平台无关这一重大优点的不足,在JAVA实现跨平台的同时,也能与其它语言(如C、C++)的动态库进行交互,给其它语言发挥优势的机会。
有了JAVA标准平台的支持,使JNI模式更加易于实现和使用。在此总结了下面这个知识图:
实例:
环境说明:ubuntu 10.4.2 LTS系统
程序清单1:src/com/magc/jni/HelloWorld.java
/**
*
*/
package com.magc.jni;
/**
* @author magc
*
*/
public class HelloWorld {
static {
System.loadLibrary("Hello");
}
public native void DisplayHello();
/**
* @param args
*/
public static void main(String[] args) {
new HelloWorld().DisplayHello();
}
}
进入src目录下,编译该JAVA类,
命令:javac ./com/magc/jni/HelloWorld.java
在该HelloWorld.java所在目录下生成HelloWorld.class
然后使用javah生成头文件,
命令:javah -jni com.magc.jni.HelloWorld
在当前目录下生成com_magc_jni_HelloWorld.h头文件,此文件供C、C++程序来引用并实现其中的函数
程序清单2:com_magc_jni_HelloWorld.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_magc_jni_HelloWorld */
#ifndef _Included_com_magc_jni_HelloWorld
#define _Included_com_magc_jni_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_magc_jni_HelloWorld
* Method: DisplayHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_magc_jni_HelloWorld_DisplayHello
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
注:1)、此头文件是不需要用户编译的,直接供其它C、C++程序引用。
2)、此头文件中的Java_com_magc_jni_HelloWorld_DisplayHello(JNIEnv *, jobject)方法,是将来与动态链接库交互的接口,并需要名字保持一致。
程序清单3:src/jni_helloworldImpl.cpp
#include <jni.h>
#include "com_magc_jni_HelloWorld.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_com_magc_jni_HelloWorld_DisplayHello
(JNIEnv *env, jobject obj)
{
printf("From jni_helloworldImpl.cpp :");
printf("Hello world ! \n");
return;
}
此C++文件实现了上述头文件中的函数,注意方法函数名要保持一致。
编译生成动态库libHello.so,
命令:g++ -shared -I /usr/lib/jvm/java-6-openjdk/include jni_helloworldImpl.cpp -o libHello.so
成功后,便会在当前目录下生成动态链接库libHello.so文件。
有了具体实现的动态库后,就可以运行JAVA调用JNI程序类的native方法了,
命令:java -Djava.library.path=. com.magc.jni.HelloWorld
输入结果即为:From jni_helloworldImpl.cpp :Hello world !
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# JAVA
# JNI原理
# JNI原理详解
# JNI
# Java通过JNI 调用动态链接库DLL操作
# java通过jni调用opencv处理图像的方法
# Java通过调用C/C++实现的DLL动态库——JNI的方法
# JNI实现最简单的JAVA调用C/C++代码
# JAVA JNI函数的注册过程详细介绍
# Java的JNI快速入门教程(推荐)
# 从源码编译Android系统的Java类库和JNI动态库的方法
# 解析Java的JNI编程中的对象引用与内存泄漏问题
# java jni调用c函数实例分享(java调用c函数)
# 详解JNI到底是什么
# 头文件
# 目录下
# 动态链接库
# 这一
# 在此
# 不需要
# 也能
# 希望能
# 便会
# 一个重要
# 谢谢大家
# 即为
# 就可以
# 实现了
# 将来
# 总结了
# 弥补了
# args
# param
# void
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理
Laravel如何与Inertia.js和Vue/React构建现代单页应用
Laravel如何处理和验证JSON类型的数据库字段
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
Laravel如何处理CORS跨域请求?(配置示例)
Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验
在Oracle关闭情况下如何修改spfile的参数
如何在Windows环境下新建FTP站点并设置权限?
laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析
Laravel怎么发送邮件_Laravel Mail类SMTP配置教程
奇安信“盘古石”团队突破 iOS 26.1 提权
详解vue.js组件化开发实践
如何做网站制作流程,*游戏网站怎么搭建?
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】
Java解压缩zip - 解压缩多个文件或文件夹实例
深入理解Android中的xmlns:tools属性
悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音
Laravel如何与Pusher实现实时通信?(WebSocket示例)
原生JS获取元素集合的子元素宽度实例
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧
javascript如何操作浏览器历史记录_怎样实现无刷新导航
Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全
Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制
如何快速搭建高效香港服务器网站?
android nfc常用标签读取总结
Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】
Python图片处理进阶教程_Pillow滤镜与图像增强
ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】
教学论文网站制作软件有哪些,写论文用什么软件
?
安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出
魔毅自助建站系统:模板定制与SEO优化一键生成指南
Laravel如何自定义错误页面(404, 500)?(代码示例)
网页设计与网站制作内容,怎样注册网站?
Laravel distinct去重查询_Laravel Eloquent去重方法
Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】
Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用
Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程
香港服务器部署网站为何提示未备案?
如何基于PHP生成高效IDC网络公司建站源码?
如何用腾讯建站主机快速创建免费网站?
如何安全更换建站之星模板并保留数据?
Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南
Windows Hello人脸识别突然无法使用
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
利用JavaScript实现拖拽改变元素大小
Laravel如何处理JSON字段的查询和更新_Laravel JSON列操作与查询技巧
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
C++用Dijkstra(迪杰斯特拉)算法求最短路径

