jni教程 java_Windows下JNI的使用教程

这篇博客详细介绍了如何使用JNI在Java和C/C++之间进行交互,包括在Java中声明native方法、使用javah生成头文件、用Visual Studio创建DLL、加载库文件并在Java中调用C++方法的全过程。
摘要由CSDN通过智能技术生成

JNI的使用大致有以下4个步骤:

一、在Java中写native方法

二、用javah命令生成C/C++头文件

三、写对应的C/C++程序实现头文件中声明的方法,并编译成库文件

四、在Java中加载这个库文件并使用

工具:

1. Eclipse for Java

2. Visual Studio 2015

依赖:

JDK和JRE:1.8.0_144版本

步骤:

在Eclipse新建一个java项目

添加一个java类,放在com.jni包下

注意:java代码都不要放到默认包下(就是不写package语句就会放到默认包),默认包下的方法在其他地方都不能调用!!

写native方法,native方法就是声明一个非java实现的方法,比如用C/C++实现

1 packagecom.jni;2

3 public classJNI {4 public nativeString getString();5 }

在Eclipse生成,此时在项目目录会生成对应的.class文件,Eclipse会将.class文件放在项目目录的bin文件夹下

80ca54b23ba3ada77e7a063c399ee445.png

打开cmd,进入bin目录

e527be02a7267f0d35955c76776bce28.png

运行javah命令,生成C/C++头文件,注意要带上java包名

注意:此处是在bin目录运行javah,不能进入com/jni下来运行javah,否则不能生成头文件。

3066057f891d320999e5dfba4af5d276.png

此时在bin目录下生成了JNI.h头文件

04a50d7d0da14ffa30bf340928c6561d.png

头文件内容如下:

1 /*DO NOT EDIT THIS FILE - it is machine generated*/

2 #include

3 /*Header for class com_jni_JNI*/

4

5 #ifndef _Included_com_jni_JNI6 #define _Included_com_jni_JNI

7 #ifdef __cplusplus8 extern "C"{9 #endif

10 /*

11 * Class: com_jni_JNI12 * Method: getString13 * Signature: ()Ljava/lang/String;14 */

15 JNIEXPORT jstring JNICALL Java_com_jni_JNI_getString16 (JNIEnv *, jobject);17

18 #ifdef __cplusplus19 }20 #endif

21 #endif

接下来打开Visual studio 2015,创建一个空的win32控制台程序,在程序类型选择DLL:

6817db95a16da88db4c4a84440d89126.png

配置JNI开发环境:

在【项目设置】 -> 【VC++目录】 -> 【包含目录】中,添加JNI头文件的路径

JNI头文件一般放在jdk目录下的include文件夹,还有include文件夹下的win32文件夹

注意release和debug以及32位和64位的选择

49384e93beb010196beb3e595df7c121.png

e83185305346919919bfe93b3a779356.png

将刚刚生成的头文件复制到vs项目目录下,在项目中添加该头文件,同时添加cpp实现头文件中的函数

9cf935b04296d391ea22b85a8341487d.png

main.cppd代码如下:

#include "com_jni_JNI.h"JNIEXPORT jstring JNICALL Java_com_jni_JNI_getString

(JNIEnv*env, jobject obj) {return env->NewStringUTF("string from C++");

}

生成项目,在项目目录的x64或release文件夹下生成了JNI.dll动态库,讲dll文件复制到Eclipse项目目录下

7d42c62a8b114cfebe16b98f577b35dc.png

修改JNI.java代码,加载JNI库并添加运行代码

1 packagecom.jni;2

3 public classJNI {4 static{5 System.loadLibrary("JNI");6 }7

8 public nativeString getString();9

10 public static voidmain(String args[]) {11 JNI jni = newJNI();12 System.out.println(jni.getString());13 }14 }

生成并运行,就可以看到从c++中返回的字符串了

502c5b04f46ea1c5e84840f2efa69f58.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值