由于項(xiàng)目需要,才了解到這個(gè)接口,,覺(jué)得非常好,所以共享給大家,一塊學(xué)習(xí)下!我就少說(shuō)兩句,復(fù)制些專業(yè)人士的說(shuō)法了啊
JNI 就是 java Native Interface 的縮寫, 是 Java 語(yǔ)言與其他類型語(yǔ)言交互的接口. 現(xiàn)在來(lái)看看什么時(shí)候會(huì)用到 jni 技術(shù)..
當(dāng)出現(xiàn)一些用java語(yǔ)言無(wú)法處理的任務(wù)時(shí),開發(fā)人員就可以利用JNI技術(shù)來(lái)完成。一般來(lái)說(shuō)下面幾種情況需要用到JNI技術(shù):
一、 開發(fā)時(shí),需要調(diào)用java語(yǔ)言不支持的依賴于操作系統(tǒng)平臺(tái)的特性的一些功能。例如:需要調(diào)用當(dāng)前的Unix系統(tǒng)的某個(gè)功能,而java不支持這個(gè)功能,就需要用到JNI技術(shù)來(lái)實(shí)現(xiàn)。
二、 開發(fā)時(shí),為了整合一些以前的非java語(yǔ)言開發(fā)的某些系統(tǒng)。例如,需要用到開發(fā)早期實(shí)現(xiàn)的一些C或C++語(yǔ)言開發(fā)的一些功能或系統(tǒng),將這些功能整合到當(dāng)前的系統(tǒng)或新的版本中。
三、 開發(fā)時(shí),為了節(jié)省程序的運(yùn)行時(shí)間,必須采用一些低級(jí)或中級(jí)語(yǔ)言。例如為了創(chuàng)建一個(gè)省時(shí)的應(yīng)用,不得不采用匯編語(yǔ)言,然后采用java語(yǔ)言通過(guò)JNI技術(shù)調(diào)用這個(gè)低級(jí)語(yǔ)言的應(yīng)用。
具體實(shí)現(xiàn),,我沒(méi)有VC++,所以也復(fù)制下高手的代碼了,呵呵,不過(guò)原理很清楚了
Java中使用JNI調(diào)用DLL
1 編寫范例文檔
public class TestNative{
PRivate native int add(int x,int y);
public static void main(String[] args) {
TestNative hh = new TestNative();
int r = hh.add(30,20);
System.out.println("result = "+r);
}
static {
System.loadLibrary("DLL_0305");
}
}
其中
LoadLibrary中的DLL文件名稱可以隨便定.只要做好的動(dòng)態(tài)鏈接庫(kù)改名成這個(gè)字符串就可以了.而native函數(shù)的來(lái)源就是該動(dòng)態(tài)鏈接庫(kù).
2. 做好該步準(zhǔn)備以后,用javac TestNative.java生成.class.檢驗(yàn)語(yǔ)法.
3. 語(yǔ)法檢查通過(guò)以后,用javah TestNative生成.h的C頭文件.
4. 打開VC++6.0,新建->; 工程 ->; win32 Dynamic-Link Library .在向?qū)е羞x擇空工程.
5. 把剛才javah生成的那個(gè)頭文件加入工程 .然后 文件->;新建->;textFile 自己做一個(gè).c文件.實(shí)現(xiàn)自己的native函數(shù).清單如下:
#include<jni.h>;
JNIEXPORT jint JNICALL Java_TestNative_add
(JNIEnv *ev, jobject obj, jint x, jint y)
{
return x+y;
}
備注:
A 其中的jni.h通常在 jdk/include/ 可以先拷貝到VC安裝目錄下的include目錄下.一勞永逸,以后可以方便使用JNI技術(shù).
B 全部的數(shù)據(jù)類型需要考慮Java和VC的接口問(wèn)題.用jint jstring 等.
C 函數(shù)名稱和自動(dòng)生成的.h文件中規(guī)定的一致.命名規(guī)則是: Java_使用類_方法名
6 全編譯一下工程.
如果沒(méi)有出錯(cuò),則此時(shí)生成動(dòng)態(tài)鏈接庫(kù)成功.
把動(dòng)態(tài)鏈接庫(kù)拷貝到TestNative.java所在的目錄上.
7 運(yùn)行java TestNative看結(jié)果吧.
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注