Java學(xué)習(xí)

          java,spring,structs,hibernate,jsf,ireport,jfreechart,jasperreport,tomcat,jboss -----本博客已經(jīng)搬家了,新的地址是 http://www.javaly.cn 如果有對(duì)文章有任何疑問(wèn)或者有任何不懂的地方,歡迎到www.javaly.cn (Java樂(lè)園)指出,我會(huì)盡力幫助解決。一起進(jìn)步

           

          Java入門(mén)--認(rèn)識(shí)理解Java中native方法

            Java不是完美的,Java的不足除了體現(xiàn)在運(yùn)行速度上要比傳統(tǒng)的C++慢許多之外,Java無(wú)法直接訪問(wèn)到操作系統(tǒng)底層(如系統(tǒng)硬件等),為此Java使用native方法來(lái)擴(kuò)展Java程序的功能。

          可以將native方法比作Java程序同C程序的接口,其實(shí)現(xiàn)步驟:

          1、在Java中聲明native()方法,然后編譯;

          2、用javah產(chǎn)生一個(gè).h文件;

          3、寫(xiě)一個(gè).cpp文件實(shí)現(xiàn)native導(dǎo)出方法,其中需要包含第二步產(chǎn)生的.h文件(注意其中又包含了JDK帶的jni.h文件);

          4、將第三步的.cpp文件編譯成動(dòng)態(tài)鏈接庫(kù)文件;

          5、在Java中用System.loadLibrary()方法加載第四步產(chǎn)生的動(dòng)態(tài)鏈接庫(kù)文件,這個(gè)native()方法就可以在Java中被訪問(wèn)了。

          JAVA本地方法適用的情況

          1.為了使用底層的主機(jī)平臺(tái)的某個(gè)特性,而這個(gè)特性不能通過(guò)JAVA API訪問(wèn)

          2.為了訪問(wèn)一個(gè)老的系統(tǒng)或者使用一個(gè)已有的庫(kù),而這個(gè)系統(tǒng)或這個(gè)庫(kù)不是用JAVA編寫(xiě)的

          3.為了加快程序的性能,而將一段時(shí)間敏感的代碼作為本地方法實(shí)現(xiàn)。

          首先寫(xiě)好JAVA文件

          /*

          * Created on 2005-12-19 Author shaoqi

          */

          package com.hode.hodeframework.modelupdate;

          public class CheckFile

          {

          public native void displayHelloWorld();

          static

          {

          System.loadLibrary("test");

          }

          public static void main(String[] args) {

          new CheckFile().displayHelloWorld();

          }

          }

          然后根據(jù)寫(xiě)好的文件編譯成CLASS文件

          然后在classes或bin之類(lèi)的class根目錄下執(zhí)行javah -jni com.hode.hodeframework.modelupdate.CheckFile,

          就會(huì)在根目錄下得到一個(gè)com_hode_hodeframework_modelupdate_CheckFile.h的文件

          然后根據(jù)頭文件的內(nèi)容編寫(xiě)com_hode_hodeframework_modelupdate_CheckFile.c文件

          #include "CheckFile.h"

          #include

          #include

          JNIEXPORT void JNICALL Java_com_hode_hodeframework_modelupdate_CheckFile_displayHelloWorld(JNIEnv *env, jobject obj)

          {

          printf("Hello world!"n");

          return;

          }

          之后編譯生成DLL文件如“test.dll”,名稱(chēng)與System.loadLibrary("test")中的名稱(chēng)一致

          vc的編譯方法:cl -I%java_home%"include -I%java_home%"include"win32 -LD com_hode_hodeframework_modelupdate_CheckFile.c -Fetest.dll

          最后在運(yùn)行時(shí)加參數(shù)-Djava.library.path=[dll存放的路徑]

          posted on 2009-10-14 16:58 找個(gè)美女做老婆 閱讀(604) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          統(tǒng)計(jì)

          公告

          本blog已經(jīng)搬到新家了, 新家:www.javaly.cn
           http://www.javaly.cn

          常用鏈接

          留言簿(6)

          隨筆檔案

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 灵丘县| 富平县| 龙井市| 乌拉特后旗| 北京市| 蒙自县| 陈巴尔虎旗| 宜川县| 封丘县| 宁河县| 阿拉善盟| 延安市| 正宁县| 富蕴县| 望都县| 喀喇沁旗| 连江县| 文水县| 石景山区| 深泽县| 文山县| 巧家县| 双桥区| 通城县| 朝阳市| 门头沟区| 阿瓦提县| 琼海市| 阿拉善盟| 张家口市| 铜梁县| 锡林浩特市| 化隆| 南乐县| 巍山| 鄂伦春自治旗| 微博| 茌平县| 扎囊县| 沧州市| 延吉市|