Java 之JNI編程
1.什么是JNI?
JNI:(Java Natibe Inetrface)縮寫。
2.為什么要學習JNI?
Java 是跨平台的語言,但是在有些時候仍然是有需要調用本地代碼(這些代碼通常是由C/C++編寫的).
Sun公司提供的JNI是Java平台的一個功能強大的接口。
這個JNI接口提供了Java與操作系統本地代碼互相調用的功能。(即java調用C++代碼)
最簡單的Java調用C/C++代碼步驟
1.創建TestNativeCode工程,新建cn.itcast包,新建class類TestNative。
2.在java類中聲明一個native的方法。
TestNative.java代碼如下:
package cn.itcast; public class TestNative { //使用JAVAH命令生成包含native方法定義的C/C++頭文件。 //該命令需要使用JDK/bin目錄下javah.exe public native void sayHello(); /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub } }
3.使用Javah命令生成包含native方法定義的C/C++頭文件,
編譯生成 cn_itcast_TestNative.h
具體方法如下:
進入cmd命令提示符下執行下列命令:
cd E: cd E:\Workspaces\MyEclipse 8.5\TestNativeCode\src javah cn.itcast.TestNative
4.打開vs2008,其他語言——Visuall C++——Win32——Win32控制台應用程序——名稱:nativeCode——確定。
如圖所示:
5.在彈出對話框中選擇應用程序設置——DLL——空項目
如圖所示:
6.將 cn_itcast_TestNative.h移動到新建的工程目錄下。
7.選中頭文件目錄——右鍵——添加現有項——瀏覽添加cn_itcast_TestNative.h
8.選中源文件——右鍵添加——新建項——C++文件(.cpp)——source.cpp——添加.
source.cpp源碼如下:
#include"cn_itcast_TestNative.h" #include<iostream> using namespace std; JNIEXPORT void JNICALL Java_cn_itcast_TestNative_sayHello(JNIEnv * env, jobject obj) { cout<<"Hello word!"<<endl; }
9.復制jni.h、jni_md.h到項目下,選中頭文件目錄—右鍵—添加現有項—添加這兩個。
注意:
jni.h在D:\Program Files\Java\jdk1.7.0_01\include目錄下,
jni_md.h在D:\Program Files\Java\jdk1.7.0_01\include\win32目錄下
10.將C/C++源文件編譯成動態鏈接庫(DLL)
11.把DLL文件加入到path環境下,XP下我的電腦——右鍵屬性——高級——環境變量
path:添加D:\test\nativeCode\Debug
12.Java類中加載DLL,然后調用生命的native方法。
TestNative.java代碼修改如下:
package cn.itcast; public class TestNative { //使用JAVAH命令生成包含native方法定義的C/C++頭文件。 //該命令需要使用JDK/bin目錄下javah.exe public native void sayHello(); /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub System.loadLibrary("nativeCode"); TestNative tst=new TestNative(); tst.sayHello(); } }
13.關閉myclipse8.5軟件,重新打開,否則會報錯。
因為myclipse每次啟動會讀一遍系統變量,剛修改后需要重新讀取,所以要重啟軟件。
14.再次打開軟件運行,就可以看到調用了我們在c++中寫的Hello word代碼了。