JNI 实例, 可以作为模板供初学者学习. 纯C版本
JNI(Java Native Interface)是Java平台提供的一种标准接口,它允许Java代码和其他语言写的代码进行交互。这个实例是一个纯C版本的JNI应用,适合初学者作为学习参考。在这个实例中,我们将探讨JNI的基本概念、如何编写本地方法以及如何使用C语言实现这些方法。 1. JNI基础 - JNI定义了一套API,使Java应用程序能够调用本地(非Java)代码,反之亦然。这在需要高效计算或利用特定硬件功能时特别有用。 - JNI函数分为三类:全局引用管理、Java到本地(C/C++)转换和本地到Java的转换。 2. 纯C版本的JNI - 在这个实例中,所有的本地方法都是用C语言编写的。C语言的效率和灵活性使得它成为实现JNI本地方法的常见选择。 - 使用Cgwin,一个在Windows环境下模拟Linux环境的工具,可以使用Makefile来编译C代码。Cgwin提供了GCC编译器,可以处理C语言的编译工作。 3. 创建JNI项目 - 需要创建一个Java类,声明native方法。例如,`public native void callFromJava();` - 然后,使用`javah`工具生成对应的C头文件,如`MyClass.h`,该文件包含了Java方法的JNI签名和声明。 - 接下来,编写C源文件,如`MyClass.c`,实现`callFromJava`方法。这里会包含JNI函数,如`JNIEnv *env, jobject this`,用于访问Java对象和调用Java方法。 - 使用Makefile编译C代码,生成动态链接库(.dll on Windows, .so on Linux等)。 4. Makefile简介 - Makefile是用于自动化构建项目的文本文件,它指定了编译、链接等步骤。在Cgwin环境下,Makefile会包含编译C源文件,链接到JNI库,以及生成动态链接库的指令。 5. 调试和运行 - 编译完成后,将生成的动态链接库放在Java类路径下,或者指定到库的路径。 - 在Java代码中加载本地库,使用`System.loadLibrary("mylibrary")`,这里的"mylibrary"是库的名称,不包括扩展名。 - 运行Java程序,本地方法会被自动调用。 6. 示例中的关键点 - `JNIEXPORT`和` JNICALL`宏是JNI定义的,用来修饰本地方法的返回类型和名称,确保与Java虚拟机的约定一致。 - `FindClass`, `GetMethodID`, `NewGlobalRef`, `CallVoidMethod`等是JNI API函数,用于查找Java类、方法ID、创建全局引用以及调用Java方法。 通过这个纯C版本的JNI实例,初学者可以深入了解JNI的工作原理,如何在C代码中操作Java对象,以及如何在Java和本地代码之间传递数据。同时,它也演示了如何在不同的开发环境中(如Cgwin)进行编译和链接。
- 1
- snowsun2012-07-11c通过jni返回各种对象到java程序的实例,貌似多线程这样是不行的,单线程实用
- 粉丝: 1205
- 资源: 47
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 从零学习自动驾驶Lattice规划算法(下) 轨迹采样 轨迹评估 碰撞检测 包含matlab代码实现和cpp代码实现,方便对照学习 cpp代码用vs2019编译 依赖qt5.15做可视化 更新:
- 风光储、风光储并网直流微电网simulink仿真模型 系统由光伏发电系统、风力发电系统、混合储能系统(可单独储能系统)、逆变器VSR+大电网构成 光伏系统采用扰动观察法实现mppt控
- (180014016)pycairo-1.18.2-cp35-cp35m-win32.whl.rar
- (180014046)pycairo-1.21.0-cp311-cp311-win32.whl.rar
- DS-7808-HS-HF / DS-7808-HW-E1
- (180014004)pycairo-1.20.0-cp36-cp36m-win32.whl.rar
- (178330212)基于Springboot+VUE的校园图书管理系统
- (402216)人脸识别
- enspOSPF多区域路由配置
- (175822648)java项目之电信计费系统完整代码.zip