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