最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JAVA中JNI的簡單使用分享

 更新時間:2013年10月03日 16:21:14   作者:  
這篇文章介紹了JAVA中JNI的簡單使用,有需要的朋友可以參考一下

了解JNI:JAVA因其跨平臺特性而受人們喜愛,也正因此,使得它和本機(jī)各種內(nèi)部聯(lián)系變得很少,所以JNI(Java Native Interface)就是用來解決JAVA本地操作的一種方式。JAVA通過JNI調(diào)用本地方法,而本地方法是以庫文件的形式存放的(在WINDOWS平臺上是DLL文件形式,在UNIX機(jī)器上是SO文件形式)。通過調(diào)用本地的庫文件的內(nèi)部方法,使JAVA可以實現(xiàn)和本地機(jī)器的緊密聯(lián)系,調(diào)用系統(tǒng)級的各接口方法。

步驟如下:

1、寫好.java源文件:

復(fù)制代碼 代碼如下:

package com.home; 

public class Testdll { 
    // 聲明所調(diào)用的庫名稱 
    static { 
        System.loadLibrary("hello"); 
    } 

    // 對將要調(diào)用的方法做本地聲明,native關(guān)鍵字不可少 
    public native static int get(); 

    public native static void set(int i); 

    public static void main(String[] args) { 
        Testdll test = new Testdll(); 
        test.set(5); 
        System.out.println(test.get()); 
    } 


2、用javac testdll.java編譯它,會生成testdll.class。

3、然后用javah 命令生成testdll.h文件,這個文件需要被C/c++程序調(diào)用來生成所需的庫文件。

注意操作:首先進(jìn)入src目錄下,然后執(zhí)行 javah -classpath . -jni com.home.Testdll

4、對于已生成的.h頭文件,C/C++所需要做的,就是把它的各個方法具體的實現(xiàn)。然后編譯連接成庫文件即可。再把庫文件拷貝到JAVA程序的路徑下面,就可以用JAVA調(diào)用C/C++所實現(xiàn)的功能了。

這是剛剛生成的.h頭文件(com_home_Testdll.h)
復(fù)制代碼 代碼如下:

/* DO NOT EDIT THIS FILE - it is machine generated */ 
#include <jni.h>  
/* Header for class com_home_Testdll */ 

#ifndef _Included_com_home_Testdll  
#define _Included_com_home_Testdll  
#ifdef __cplusplus  
extern "C" {  
#endif  
/* 
 * Class:     com_home_Testdll 
 * Method:    get 
 * Signature: ()I 
 */ 
JNIEXPORT jint JNICALL Java_com_home_Testdll_get  
  (JNIEnv *, jclass);  

/* 
 * Class:     com_home_Testdll 
 * Method:    set 
 * Signature: (I)V 
 */ 
JNIEXPORT void JNICALL Java_com_home_Testdll_set  
  (JNIEnv *, jclass, jint);  

#ifdef __cplusplus  
}  
#endif  
#endif

具體實現(xiàn)時,我們只關(guān)心這兩個函數(shù)原型
復(fù)制代碼 代碼如下:

JNIEXPORT jint JNICALL Java_com_home_Testdll_get (JNIEnv *, jclass);

JNIEXPORT void JNICALL Java_com_home_Testdll_set (JNIEnv *, jclass, jint);


這里JNIEXPORT和JNICALL都是JNI的關(guān)鍵字,表示此函數(shù)是要被JNI調(diào)用的。而jint是以JNI為中介使JAVA的int類型與本地的int溝通的一種類型,我們可以視而不見,就當(dāng)做int使用。函數(shù)的名稱是JAVA_再加上java程序的package路徑再加函數(shù)名組成的。參數(shù)中,我們也只需要關(guān)心在JAVA程序中存在的參數(shù),至于JNIEnv*和jclass我們一般沒有必要去碰它。

5、我們用testdll.cpp文件具體實現(xiàn)這兩個函數(shù):
復(fù)制代碼 代碼如下:

#include "com_home_Testdll.h"  
   
 int i = 0;  
   
 JNIEXPORT jint JNICALL Java_com_home_Testdll_get (JNIEnv *, jclass)  
   
 {  
   
 return i;  
   
 }  
   
 JNIEXPORT void JNICALL Java_com_home_Testdll_set (JNIEnv *, jclass, jint)  
   
 {  
   
 i = j;  
   
 }

6、編譯連接成DLL庫文件。并且名稱為hello(要與JAVA中需要調(diào)用的一致)。

操作可以使用VS的cl命令

7、把hello.dll拷貝到Testdll.class的目錄下,然后 java Testdll運(yùn)行它,就OK了。

相關(guān)文章

  • SpringMVC實現(xiàn)RESTful風(fēng)格:@PathVariable注解的使用方式

    SpringMVC實現(xiàn)RESTful風(fēng)格:@PathVariable注解的使用方式

    這篇文章主要介紹了SpringMVC實現(xiàn)RESTful風(fēng)格:@PathVariable注解的使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Spring session實現(xiàn)共享單點登錄案例過程解析

    Spring session實現(xiàn)共享單點登錄案例過程解析

    這篇文章主要介紹了Spring session實現(xiàn)共享單點登錄案例過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • Java中CyclicBarrier和CountDownLatch的用法與區(qū)別

    Java中CyclicBarrier和CountDownLatch的用法與區(qū)別

    CyclicBarrier和CountDownLatch這兩個工具都是在java.util.concurrent包下,并且平時很多場景都會使用到。本文將會對兩者進(jìn)行分析,記錄他們的用法和區(qū)別,感興趣的可以了解一下
    2021-08-08
  • SpringBoot輕松實現(xiàn)ip解析(含源碼)

    SpringBoot輕松實現(xiàn)ip解析(含源碼)

    IP地址一般以數(shù)字形式表示,如192.168.0.1,IP解析是將這個數(shù)字IP轉(zhuǎn)換為包含地區(qū)、城市、運(yùn)營商等信息的字符串形式,如“廣東省深圳市 電信”,這樣更方便人理解和使用,本文給大家介紹了SpringBoot如何輕松實現(xiàn)ip解析,需要的朋友可以參考下
    2023-10-10
  • mybatis學(xué)習(xí)之路mysql批量新增數(shù)據(jù)的方法

    mybatis學(xué)習(xí)之路mysql批量新增數(shù)據(jù)的方法

    這篇文章主要介紹了mybatis學(xué)習(xí)之路mysql批量新增數(shù)據(jù)的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • 解決springboot mapper注入報紅問題

    解決springboot mapper注入報紅問題

    這篇文章主要介紹了解決springboot mapper注入報紅問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java實現(xiàn)OJ多組測試數(shù)據(jù)的輸入方法

    Java實現(xiàn)OJ多組測試數(shù)據(jù)的輸入方法

    今天小編就為大家分享一篇Java實現(xiàn)OJ多組測試數(shù)據(jù)的輸入方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Spring中byName和byType的區(qū)別及說明

    Spring中byName和byType的區(qū)別及說明

    這篇文章主要介紹了Spring中byName和byType的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Spring?Boot?Actuator使用說明

    Spring?Boot?Actuator使用說明

    SpringBootActuator?是一個用于監(jiān)控和管理?Spring?Boot?應(yīng)用程序的強(qiáng)大工具,通過引入依賴并配置,可以啟用默認(rèn)的監(jiān)控接口,本文介紹Spring?Boot?Actuator的使用,感興趣的朋友一起看看吧
    2025-02-02
  • RocketMQ中的消費(fèi)者啟動流程解讀

    RocketMQ中的消費(fèi)者啟動流程解讀

    這篇文章主要介紹了RocketMQ中的消費(fèi)者啟動流程解讀,RocketMQ是一款高性能、高可靠性的分布式消息中間件,消費(fèi)者是RocketMQ中的重要組成部分,消費(fèi)者負(fù)責(zé)從消息隊列中獲取消息并進(jìn)行處理,需要的朋友可以參考下
    2023-10-10

最新評論

蓬溪县| 河北省| 汪清县| 昌江| 辽源市| 正镶白旗| 化州市| 双峰县| 通河县| 宁武县| 岳池县| 霍城县| 荣成市| 类乌齐县| 宁武县| 新干县| 交城县| 博爱县| 大渡口区| 盖州市| 高密市| 长寿区| 灵山县| 平顶山市| 翁牛特旗| 敦化市| 舒兰市| 汽车| 普兰县| 乌鲁木齐市| 贞丰县| 大安市| 大竹县| 盘山县| 龙州县| 迁安市| 莒南县| 宿迁市| 巫溪县| 雅江县| 林芝县|