国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

JNI入門教程之HelloWorld篇

2019-11-18 14:53:42
字體:
供稿:網(wǎng)友

    本文講述如何使用JNI技術(shù)實現(xiàn)HelloWorld,目的是讓讀者熟悉JNI的機制并編寫第一個HelloWorld程序。

    java Native Interface(JNI)是Java語言的本地編程接口,是J2SDK的一部分。在java程序中,我們可以通過JNI實現(xiàn)一些用java語言不便實現(xiàn)的功能。通常有以下幾種情況我們需要使用JNI來實現(xiàn)。

  • 標(biāo)準(zhǔn)的java類庫沒有提供你的應(yīng)用程序所需要的功能,通常這些功能是平臺相關(guān)的
  • 你希望使用一些已經(jīng)有的類庫或者應(yīng)用程序,而他們并非用java語言編寫的
  • 程序的某些部分對速度要求比較苛刻,你選擇用匯編或者c語言來實現(xiàn)并在java語言中調(diào)用他們

    在《java核心技術(shù)》中,作者提到JNI的時候,建議不到萬不得已不要使用JNI技術(shù),一方面它需要你把握更多的知識才可以駕馭,一方面使用了JNI你的程序就會喪失可移植性。在本文我們跳過JNI的底層機制,讀者最好先把它想象為本地代碼和java代碼的粘合劑。關(guān)系如下圖所示:
JNI入門教程之HelloWorld篇

 

 

 

 

 

 

 

    下面我們開始編寫HelloWorld程序,由于涉及到要編寫c/c++代碼因此我們會在開發(fā)中使用Microsoft VC++工具。

  1. 編寫java代碼
    我們在硬盤上建立一個hello目錄作為我們的工作目錄,首先我們需要編寫自己的java代碼,在java代碼中我們會聲明native方法,代碼非常簡單。如下所示
    class HelloWorld
    {
        public native void displayHelloWorld();
        static {
            System.loadLibrary("hello");
        }
       
        public static void main(String[] args) {
            new HelloWorld().displayHelloWorld();
        }
    }
    注重我們的displayHelloWorld()方法的聲明,它有一個要害字native,表明這個方法使用java以外的語言實現(xiàn)。方法不包括實現(xiàn),因為我們要用c/c++語言實現(xiàn)它。注重System.loadLibrary("hello")這句代碼,它是在靜態(tài)初始化塊中定義的,系統(tǒng)用來裝載hello共享庫,這就是我們在后面生成的hello.dll(假如在其他的操作系統(tǒng)可能是其他的形式,比如hello.so)
  2. 編譯java代碼
    javac HelloWorld.java  生成HelloWorld.class文件
  3. 創(chuàng)建.h文件
    這一步中我們要使用javah命令生成.h文件,這個文件要在后面的c/c++代碼中用到,我們運行
    javah HelloWorld。這樣我們可以看到在相同目錄下生成了一個HelloWorld.h文件,文件內(nèi)容如下
    在此我們不對他進行太多的解釋。
    /* DO NOT EDIT THIS FILE - it is machine generated */
    #include <jni.h>
    /* Header for class HelloWorld */
    #ifndef _Included_HelloWorld
    #define _Included_HelloWorld
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     HelloWorld
     * Method:    displayHelloWorld
     * Signature: ()V
     */
    JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld
      (JNIEnv *, jobject);
    #ifdef __cplusplus
    }
    #endif
    #endif
  4. 編寫本地實現(xiàn)代碼
    在這部分我們要用C/C++語言實現(xiàn)java中定義的方法,我們在VC++中新建一個PRoject,然后創(chuàng)建一個HelloWorldImp.cpp文件,內(nèi)容如下
    #include <jni.h>
    #include "HelloWorld.h"
    #include <stdio.h>

    JNIEXPORT void JNICALL
    Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj)
    {
        printf("Hello world!/n");
        return;
    }
    注重我們這里include了 jni.h和剛才得到的HelloWorld.h文件。因此你要在VC++里面設(shè)置好,jni.h在JAVA_HOME/include里面。編譯通過后再生成hello.dll文件。
  5. 運行java程序
    把上面生成的hello.dll文件復(fù)制到我們的工作目錄,這時候我們的目錄中包括HelloWorld.java,HelloWorld.class和hello.dll文件。運行java HelloWorld命令,則可在控制臺看到Hello world
    的輸出了。



發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 化州市| 女性| 萍乡市| 玉田县| 泾阳县| 宁德市| 东丽区| 嫩江县| 澄城县| 宿松县| 屏山县| 兴隆县| 武胜县| 从化市| 嘉兴市| 井陉县| 澄江县| 郧西县| 吴川市| 阿瓦提县| 上饶县| 汨罗市| 金寨县| 玉溪市| 扎囊县| 尉犁县| 涞水县| 中阳县| 长乐市| 木里| 塔河县| 临潭县| 万山特区| 扶绥县| 龙胜| 福鼎市| 新蔡县| 千阳县| 海城市| 万载县| 仙桃市|