1. 程式人生 > >JNI 入門教程

JNI 入門教程

1.編寫java測試類

2.利用java測試類生成C標頭檔案(我沒有C和C++基礎,後面出現的非JAVA的程式碼具體是C還是C++,我也不清楚。所以,教程中我都把它稱為C)

3.利用C標頭檔案編寫C程式碼

4.生成C庫

5.java呼叫測試

第一步:編寫java測試類

程式碼如下:

package com.aijiao.test;

public class JNIDemo {
    
    //定義一個方法,該方法在C中實現
    public
native void testHello();          public static void main(String[] args){         //載入C檔案         System.loadLibrary("TestJNI");         JNIDemo
jniDemo = new JNIDemo();         jniDemo.testHello();     } }
com.aijiao.test; public class JNIDemo {          //定義一個方法,該方法在C中實現     public native void testHello();          
public static void main(String[] args){         //載入C檔案         System.loadLibrary("TestJNI");         JNIDemo jniDemo = new JNIDemo();         jniDemo.testHello();     } }

第二步:利用java類生成C標頭檔案

生成命令如下:

javah -classpath . -jni com.aijiao.test.JNIDemo-classpath . -jni com.aijiao.test.JNIDemo

該命令需要在java測試類的工程的bin目錄下執行

下圖是生成的標頭檔案

第三步:用visual studio編寫C程式碼

1.選擇檔案-》新建-》專案

2.選擇(Win32),輸入專案名稱,專案地址,點選確定。

3.直接點選下一步

4.這裡選擇DLL,空專案,然後點完成。

5.生成如下如的專案結構

6.在原始檔的資料夾上面右鍵,選擇新增-》類。

7.直接點選新增

8.輸入類名,點選完成。(C++類)

9.在你的JDK目錄的include目錄下有一個jni.h的檔案,include的win32目錄下有個jni_md.h檔案,還有java工程的bin目錄下的C標頭檔案,一起拷貝到C工程的TestJNI目錄下:(當前工程名就叫TestJNI,工程目錄下還有一個TestJNI目錄,工程目錄-》TestJNI-》jni.h   com_aijiao_test_JNIDemo.h    jni_md.h)如下圖:

當前目錄為工程目錄

拷貝過來的jni.h,com_aijiao_test_JNIDemo.h和jni_md.h

10.在C專案的標頭檔案資料夾上面右鍵,新增-》現有項

11.選擇jni.h,com_aijiao_test_JNIDemo.h和jni_md.h

12.開啟com_aijiao_test_JNIDemo.h檔案

13.將#include <jni.h>修改為#include "jni.h",錯誤提示消失。

14.在TestJNI.cpp檔案中寫入如下程式碼:

程式碼:

#include "com_aijiao_test_JNIDemo.h"
#include <iostream>
#include <stdio.h>

JNIEXPORT void JNICALL Java_com_aijiao_test_JNIDemo_testHello
(JNIEnv *, jobject) {
    printf("this is C++ print");
} "com_aijiao_test_JNIDemo.h"
#include <iostream>
#include <stdio.h>

JNIEXPORT void JNICALL Java_com_aijiao_test_JNIDemo_testHello
(JNIEnv *, jobject) {
    printf("this is C++ print");
}

15.配置C工程,在解決方案上右鍵,選擇屬性

16.做如下配置

第四步:在專案上右鍵生成,輸出如下下資訊

下面是生成的dll庫

第五步:在Java專案下如下設定

填寫dll庫所在路徑(不需要帶檔名),儲存即可。

執行java類,結果入下。

作者: aijiao

Email: [email protected]

地址: https://my.oschina.net/aijiaoer0624/blog/1142876