Windows下JNI的使用教程


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 package com.jni; 2 
3 public class JNI { 4     public native String getString(); 5 }

 

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

 

打开cmd,进入bin目录

 

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

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

 

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

 

 头文件内容如下:

 1 /* DO NOT EDIT THIS FILE - it is machine generated */
 2 #include <jni.h>
 3 /* Header for class com_jni_JNI */
 4 
 5 #ifndef _Included_com_jni_JNI  6 #define _Included_com_jni_JNI
 7 #ifdef __cplusplus  8 extern "C" {  9 #endif
10 /*
11  * Class: com_jni_JNI 12  * Method: getString 13  * Signature: ()Ljava/lang/String; 14  */
15 JNIEXPORT jstring JNICALL Java_com_jni_JNI_getString 16   (JNIEnv *, jobject); 17 
18 #ifdef __cplusplus 19 } 20 #endif
21 #endif

 

 

 

 

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

 

 

配置JNI开发环境:

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

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

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

 

 

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

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项目目录下

 

 

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

 1 package com.jni;  2 
 3 public class JNI {  4     static {  5         System.loadLibrary("JNI");  6  }  7     
 8     public native String getString();  9     
10     public static void main(String args[]) { 11         JNI jni = new JNI(); 12  System.out.println(jni.getString()); 13  } 14 }

 

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

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM