中文字幕在线一区二区在线,久久久精品免费观看国产,无码日日模日日碰夜夜爽,天堂av在线最新版在线,日韩美精品无码一本二本三本,麻豆精品三级国产国语,精品无码AⅤ片,国产区在线观看视频

      JAVA認證基礎知識:JavaNativeInterface學習小結

      時間:2024-07-08 19:00:28 JAVA認證 我要投稿
      • 相關推薦

      JAVA認證基礎知識:JavaNativeInterface學習小結

        JNI是Java Native Interface的縮寫,中文為JAVA本地調用。使用JNI可以很方便的用我們的Java程序調用C/C++程序。很多時候,某些功能用Java無法實現,比如說涉及到底層驅動的一些功能,這時候我們就可以利用JNI來調用C或者C++程序來實現,這就是JNI的強大之處。但是JNI也有它的缺點,使用java與本地已編譯的代碼交互,通常會喪失平臺可移植性。

      JAVA認證基礎知識:JavaNativeInterface學習小結

        下面是一個JNI例子,調用C++輸出"hello world":

        第一步:創建Java類,在里面定義一個本地方法(用native關鍵字修飾的方法)

        public native void sayHello();

        第二步:使用javah命令(javah 類的全路徑)生成本地方法的C++頭文件

        在DOS窗口中進入工程所在目錄,然后執行javah com.test.TestNative命令,執行完之后就會在當前目錄生成一個后綴名為。h的頭文件,如com_test_TestNative.h,這個頭文件是根據包名和類名來命名的。

        1 /* DO NOT EDIT THIS FILE - it is machine generated */

        2 #include

        3 /* Header for class com_test_TestNative */

        4

        5 #ifndef _Included_com_test_TestNative

        6 #define _Included_com_test_TestNative

        7 #ifdef __cplusplus

        8 extern "C" {

        9 #endif

        10 /*

        11 * Class: com_test_TestNative

        12 * Method: sayHello

        13 * Signature: ()V

        14 */

        15 JNIEXPORT void JNICALL Java_com_test_TestNative_sayHello

        16 (JNIEnv *, jobject);

        17

        18 #ifdef __cplusplus

        19 }

        20 #endif

        21 #endif

        15、16行是對TestNative類中的本地方法sayHello()的聲明。這個h文件相當于我們在java里面的接口,這里聲明了一個 Java_com_test_TestNative_sayHello (JNIEnv *, jobject);方法,然后在我們的本地方法里面實現這個方法,也就是說我們在編寫C/C++程序的時候所使用的方法名必須和這里的一致。

        第三步:編寫C/C++本地代碼,生成動態鏈接庫文件

        首先在VC6.0(當然也可以用其他工具)中創建一個dll工程---Win32 Dynamic-Link Library工程。然后將上面生成的頭文件com_test_TestNative.h添加到該工程中,然后創建一個源文件引用該頭文件并且實現頭文件中本地函數的功能:

        1 #include

        2 #include"com_test_TestNative.h"

        3

        4 JNIEXPORT void JNICALL Java_com_test_TestNative_sayHello(JNIEnv *env, jobject obj)

        5 {

        6 cout《"hello world!"《endl;

        7 }

        這里因為com_test_TestNative.h中引入了jni.h所以要將jni.h加入到VC6.0安裝目錄下的Include目錄中。jni.h在JDK安裝目錄下的include中,同時得件include/win32中的兩個頭文件jawt_md.h、jni_md.h也導入到 VC6.0中。

        將所依賴的頭文件導入之后,我們就可以構建該工程了,按F7就行了,完了會在工程目錄中的Degug目錄下生成一個動態鏈接庫文件,我這里生成的是NativeCode.dll.我們就可以將該dll文件拷貝到環境變量path所包含的目錄下給咱們的Java程序調用了,為了方便,我們也可以將 dll所在的工程目錄加入到環境變量path中去,這樣可以避免每次都要拷貝的麻煩。注意修改環境變量之后要重啟myeclipse.

        第四步:Java調用本地函數

        1 package com.test;

        2

        3 public class TestNative {

        4 public native void sayHello();

        5

        6 /**

        7 * @param args

        8 */

        9 public static void main(String[] args) {

        10 System.loadLibrary("NativeCode");

        11 TestNative tNative = new TestNative();

        12 tNative.sayHello();

        13 }

        14 }

        第10行是加載動態鏈接庫,JVM只需要加載一次就可以調用了,"NativeCode"是上面生成的動態鏈接庫的名字,不含后綴名。

        運行該程序,成功打印輸出了"hello world".

      【JAVA認證基礎知識:JavaNativeInterface學習小結】相關文章:

      JAVA認證基礎知識:Java獲取當前的系統時間06-08

      Java認證基礎知識:java字符串轉化整型問題07-21

      JAVA認證簡介10-02

      JAVA認證基礎知識:基于反射機制的服務代理調用09-20

      JAVA認證基礎知識:JSP使用數據庫操作06-10

      JAVA認證考試細則06-10

      SUN JAVA認證介紹12-18

      java認證考試介紹07-31

      Java的基礎知識07-27

      主站蜘蛛池模板: 黑人一区二区三区在线| 上饶市| av网址不卡免费在线观看| 国产不卡视频一区二区在线观看| 凌海市| 贞丰县| 国产一区三区五区视频在线观看| 中文字幕成人乱码亚洲| 国产精品一区二区午夜久久| 加勒比网视频在线观看| 宁陵县| 久久精品国产亚洲一级二级| 亚洲一区二区国产精品视频| 亚洲一区二区成人在线视频| 亚洲青青草视频在线播放| 日韩精品一区二区三区毛片| 国产一区二区亚洲一区二区三区| 骚片av蜜桃精品一区| 中国免费av一区二区| 在线视频一区二区三区在线观看 | 司法| 五指山市| 太保市| 融水| 政和县| 亚洲二区三区在线播放| 亚洲女同成av人片在线观看| 精品午夜一区二区三区久久| 丝袜美腿一区二区在线观看| 8090成人午夜精品无码| 久久99精品中文字幕在| 国产中文字幕乱码在线| 少妇爽到爆视频网站免费| 亚洲一区二区三区无吗| 亚洲人妖女同在线播放| 日韩国产av一区二区三区精品| 91免费国产| 第十色丰满无码| 国产区高清在线一区二区三区| 久久久9色精品国产一区二区三区 亚洲人成影院在线高清 | 加勒比精品一区二区三区 |