jni簡(jiǎn)介
jni是java native interface的縮寫(xiě),它提供了若干的api實(shí)現(xiàn)了java和其他語(yǔ)言的通信(主要是c&c++)。從java1.1開(kāi)始,jni標(biāo)準(zhǔn)成為java平臺(tái)的一部分,它允許java代碼和其他語(yǔ)言寫(xiě)的代碼進(jìn)行交互。jni一開(kāi)始是為了本地已編譯語(yǔ)言,尤其是c和c++而設(shè)計(jì)的,但是它并不妨礙你使用其他編程語(yǔ)言,只要調(diào)用約定受支持就可以了。使用java與本地已編譯的代碼交互,通常會(huì)喪失平臺(tái)可移植性。但是,有些情況下這樣做是可以接受的,甚至是必須的。例如,使用一些舊的庫(kù),與硬件、操作系統(tǒng)進(jìn)行交互,或者為了提高程序的性能。jni標(biāo)準(zhǔn)至少要保證本地代碼能工作在任何java 虛擬機(jī)環(huán)境。 簡(jiǎn)單的來(lái)說(shuō)jni就是方便了java調(diào)用c,c++語(yǔ)言的函數(shù);java通過(guò)jni提供接口(頭文件),c,c++實(shí)現(xiàn)這些函數(shù)供java調(diào)用。
在java中沒(méi)有提供清屏的接口,所有可以通過(guò)jni調(diào)用c語(yǔ)言的system(“cls”)清屏。當(dāng)然,僅限于cmd清屏,不支持eclipse的控制臺(tái)console清屏。
步驟:
1. 編寫(xiě)java的清屏native接口。
1
2
3
4
5
6
|
public class clear { static { system.loadlibrary( "clear" ); //加載clear.dll動(dòng)態(tài)庫(kù) } public native static void clscmd(); //清屏 } |
2.編譯clear.java,生成clear.class
3.用javah生成對(duì)應(yīng)的c語(yǔ)言頭文件clear.h
4.使用visual studio創(chuàng)建win32工程,生成對(duì)應(yīng)的dll動(dòng)態(tài)庫(kù)
4.1 創(chuàng)建工程
4.2 應(yīng)用程序類型:dll
4.3 把第3步生成的頭文件clear.h,以及需要依賴的兩個(gè)頭文件jni.h和jni_md.h導(dǎo)入工程
jni.h在jdk的安裝路徑include目錄下。
jni_md.h在jdk安裝路徑include目錄中的win32目錄下。
把這三個(gè)頭文件先復(fù)制粘貼到工程項(xiàng)目目錄下:
然后在vs中把它們導(dǎo)入:
頭文件--->添加--->現(xiàn)有項(xiàng)--->選中上邊的三個(gè)頭文件--->添加
把clear.h頭文件中的 #include <jni.h> 改為 #include “jni.h”
4.4 添加.cpp文件,編寫(xiě)c代碼。
源文件--->添加--->新建項(xiàng)--->c++文件:clear.cpp
1
2
3
4
5
6
|
#include "clear.h" #include <iostream> jniexport void jnicall java_clear_clscmd (jnienv *, jclass) { system( "cls" ); //c的清屏 } |
4.5 設(shè)置生成64位dll動(dòng)態(tài)庫(kù)
解決方案--->屬性
4.6 生成dll
解決方案--->右鍵生成
5 測(cè)試
5.1 把clear.dll復(fù)制到第1,2步clear.class所在目錄.
5.2 編寫(xiě)測(cè)試類
1
2
3
4
5
6
|
public class testjni { public static void main(string[] args) { system.out.println( "hello jni" ); clear.clscmd(); //清屏 } } |
5.3 編譯測(cè)試類
javac testjni.java
5.4 執(zhí)行測(cè)試類
java testjni
完美清屏,搞定!!!
原文鏈接:https://www.cnblogs.com/xyj-bk/p/9083427.html