|
Java本地接口(JNI)是為java編寫(xiě)本地方法和jvm嵌入本地應(yīng)用程序的標(biāo)準(zhǔn)的應(yīng)用程序接口。首要的目標(biāo)是在給定的平臺(tái)上通過(guò)所有的jvm來(lái)實(shí)現(xiàn)兼容的二進(jìn)制編碼本地方法庫(kù)。 當(dāng)使用經(jīng)典的虛擬機(jī)時(shí),Java2 SDK支持早期的本地方法接口(Native Method Interface)。 NMI是最初在JDK1.0實(shí)現(xiàn)的,NMI并不是java平臺(tái)標(biāo)準(zhǔn)的一部分。
Java Native Interface Tutorial http://java./docs/books/tutorial/native1.1/index.html 這個(gè)指南告訴你怎么把本地方法集成到你的java程序里面,你將會(huì)學(xué)會(huì)怎樣寫(xiě)本地方法,本地方法是一種使用其他語(yǔ)言來(lái)實(shí)現(xiàn)的方法,比如C. JNI 概述 JNI是一個(gè)本地編程接口,使用JNI務(wù)必保證你的代碼能夠在所有的平臺(tái)在完全兼容。當(dāng)某些應(yīng)用程序不能完全通過(guò)java實(shí)現(xiàn)的情況下,程序員就可以使用JNI來(lái)寫(xiě)本地接口方法來(lái)處理這些情況,例如,你可能需要使用這些本地方法和JNI在下面的情況: ·在你的應(yīng)用程序里面,java類庫(kù)可能不能支持獨(dú)立平臺(tái)的一些特征 ·你可能有一些其他語(yǔ)言寫(xiě)好的鏈接庫(kù),并且你希望通過(guò)java應(yīng)用程序來(lái)訪問(wèn)這些鏈接庫(kù) ·你可能想要通過(guò)低級(jí)語(yǔ)言來(lái)實(shí)現(xiàn)一部分效率要求很高的代碼,比如匯編,然后通過(guò)java應(yīng)用程序來(lái)調(diào)用它。 一 個(gè)本地方法可以創(chuàng)建java對(duì)象,包括數(shù)組和字符串,然后檢查和使用這些對(duì)象來(lái)執(zhí)行某些任務(wù)。一個(gè)本地方法也可以更新由它創(chuàng)建或被傳進(jìn)來(lái)的java對(duì)象, 并且這些被更新的對(duì)象對(duì)于java程序來(lái)說(shuō)同樣有效。因此,無(wú)論是本地語(yǔ)言部分還是java語(yǔ)言部分都可以創(chuàng)建、更新和訪問(wèn)java對(duì)象,并且在他們之間 共享這些變量。 JNI允許你在本地方法中使用java語(yǔ)言。具體的說(shuō),你可以在本地方法中catch and throw 異常,并且把異常處理交給java應(yīng)用程序來(lái)處理。本地方法同時(shí)也可以獲取java類信息。通過(guò)調(diào)用JNI函數(shù),本地方法可以加載java類和獲取類信 息。最后,本地方法能使用JNI來(lái)執(zhí)行時(shí)時(shí)的類型檢查。 下圖解釋了傳統(tǒng)的C語(yǔ)言如何使用JNI連接java庫(kù),并調(diào)用java方法,使用java類等
下圖是java應(yīng)用程序調(diào)用本地方法,顯示了許多java程序利用JNI的可能性,包括調(diào)用C方法,C++類,調(diào)用匯編例程等等
很容易看到,JNI像膠水一樣把java應(yīng)用程序和本地應(yīng)用程序粘在了一起
待續(xù) 。。。 關(guān)于jni的測(cè)試 環(huán)境 jdk1.4.2_08; vc6.0; winxp sp1 1.編寫(xiě)java程序 //Filename:JNITest.java public class JNITest{ public native void sayHello(); static{ public static void main(String[] args){ 2.編譯java程序 javac JNITest.java 3.生成.h文件 javah JNITest 4.用生成的.h文件編寫(xiě)連接庫(kù)(本例使用vc6.0) JNITest.cpp如下 #include "JNITest.h"
/* printf("Hello,world!\n"); /* /* i = ji; 5.把編譯好的testdll文件copy到class目錄下 6.運(yùn)行java程序 java JNITest 輸入結(jié)果 Hello,world! Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=400170 |
|
|
來(lái)自: jinzq > 《我的圖書(shū)館》