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

JAVA JNI原理詳細介紹及簡單實例代碼

 更新時間:2016年12月16日 15:48:58   作者:Java開發(fā)-擱淺  
這篇文章主要介紹了JAVA JNI原理的相關資料,這里提供簡單實例代碼,需要的朋友可以參考下

JAVA JNI原理

JNI是JAVA標準平臺中的一個重要功能,它彌補了JAVA的與平臺無關這一重大優(yōu)點的不足,在JAVA實現跨平臺的同時,也能與其它語言(如C、C++)的動態(tài)庫進行交互,給其它語言發(fā)揮優(yōu)勢的機會。

有了JAVA標準平臺的支持,使JNI模式更加易于實現和使用。在此總結了下面這個知識圖:

實例:

環(huán)境說明:ubuntu 10.4.2 LTS系統(tǒng)

程序清單1:src/com/magc/jni/HelloWorld.java

 /**
  * 
  */
  package com.magc.jni;
 
  /**
  * @author magc
  *
  */
 public class HelloWorld {
   
   static {
     
     System.loadLibrary("Hello");
     
   }
 
   public   native void DisplayHello();
   /**
   * @param args
   */
   public static void main(String[] args) {
 
     new HelloWorld().DisplayHello();
   }
 
 }

進入src目錄下,編譯該JAVA類,

命令:javac ./com/magc/jni/HelloWorld.java

在該HelloWorld.java所在目錄下生成HelloWorld.class

然后使用javah生成頭文件,

命令:javah -jni com.magc.jni.HelloWorld

在當前目錄下生成com_magc_jni_HelloWorld.h頭文件,此文件供C、C++程序來引用并實現其中的函數

程序清單2:com_magc_jni_HelloWorld.h

/* DO NOT EDIT THIS FILE - it is machine generated */
 #include <jni.h>
  /* Header for class com_magc_jni_HelloWorld */
 
 #ifndef _Included_com_magc_jni_HelloWorld
 #define _Included_com_magc_jni_HelloWorld
 #ifdef __cplusplus
 extern "C" {
 #endif
 /*
 * Class:   com_magc_jni_HelloWorld
 * Method:  DisplayHello
 * Signature: ()V
 */
 JNIEXPORT void JNICALL Java_com_magc_jni_HelloWorld_DisplayHello
  (JNIEnv *, jobject);
 
 #ifdef __cplusplus
 }
 #endif
 #endif

注:1)、此頭文件是不需要用戶編譯的,直接供其它C、C++程序引用。
     2)、此頭文件中的Java_com_magc_jni_HelloWorld_DisplayHello(JNIEnv *, jobject)方法,是將來與動態(tài)鏈接庫交互的接口,并需要名字保持一致。

 程序清單3:src/jni_helloworldImpl.cpp

#include <jni.h>
#include "com_magc_jni_HelloWorld.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_com_magc_jni_HelloWorld_DisplayHello
(JNIEnv *env, jobject obj)
{
  printf("From jni_helloworldImpl.cpp :");
  printf("Hello world ! \n");
  return;
}

此C++文件實現了上述頭文件中的函數,注意方法函數名要保持一致。
編譯生成動態(tài)庫libHello.so,

命令:g++ -shared -I /usr/lib/jvm/java-6-openjdk/include jni_helloworldImpl.cpp -o libHello.so

成功后,便會在當前目錄下生成動態(tài)鏈接庫libHello.so文件。

有了具體實現的動態(tài)庫后,就可以運行JAVA調用JNI程序類的native方法了,

命令:java -Djava.library.path=. com.magc.jni.HelloWorld

輸入結果即為:From jni_helloworldImpl.cpp :Hello world !

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關文章

  • Java Stream的基本概念以及創(chuàng)建方法

    Java Stream的基本概念以及創(chuàng)建方法

    這篇文章主要介紹了Java Stream的基本概念以及創(chuàng)建方法,幫助大家更好的理解和學習Java,感興趣的朋友可以了解下
    2020-08-08
  • java?Map集合中取鍵和值的4種方式舉例

    java?Map集合中取鍵和值的4種方式舉例

    Java中的Map是一種鍵值對存儲的數據結構,其中每個鍵都唯一,與一個值相關聯(lián),這篇文章主要給大家介紹了關于java?Map集合中取鍵和值的4種方式,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • 優(yōu)雅地在Java應用中實現全局枚舉處理的方法

    優(yōu)雅地在Java應用中實現全局枚舉處理的方法

    這篇文章主要給大家介紹了關于如何優(yōu)雅地在Java應用中實現全局枚舉處理的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-02-02
  • Spring組件開發(fā)模式支持SPEL表達式

    Spring組件開發(fā)模式支持SPEL表達式

    今天小編就為大家分享一篇關于Spring組件開發(fā)模式支持SPEL表達式,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • 利用EasyPOI實現多sheet和列數的動態(tài)生成

    利用EasyPOI實現多sheet和列數的動態(tài)生成

    EasyPoi功能如同名字,主打的功能就是容易,讓一個沒見接觸過poi的人員就可以方便的寫出Excel導出,Excel導入等功能,本文主要來講講如何利用EasyPOI實現多sheet和列數的動態(tài)生成,需要的可以了解下
    2025-03-03
  • java實現角色及菜單權限的項目實踐

    java實現角色及菜單權限的項目實踐

    在Java中,實現角色及菜單權限管理涉及定義實體類、設計數據庫表、實現服務層和控制器層,這種管理方式有助于有效控制用戶權限,適用于企業(yè)級應用,感興趣的可以一起來了解一下
    2024-09-09
  • Java連接MySQL8.0 JDBC的詳細步驟(IDEA版本)

    Java連接MySQL8.0 JDBC的詳細步驟(IDEA版本)

    這篇文章主要介紹了Java連接MySQL8.0 JDBC的詳細步驟(IDEA版本),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • SpringBoot獲取HttpServletRequest的3種方式總結

    SpringBoot獲取HttpServletRequest的3種方式總結

    這篇文章主要給大家介紹了關于SpringBoot獲取HttpServletRequest的3種方式,在Spring boot項目中經常要用到Servlet的常用對象如HttpServletRequest request,HttpServletResponse response,HttpSession session,需要的朋友可以參考下
    2023-08-08
  • java -D參數設置系統(tǒng)屬性無效問題及解決

    java -D參數設置系統(tǒng)屬性無效問題及解決

    這篇文章主要介紹了java -D參數設置系統(tǒng)屬性無效問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • SpringBoot@Profile注解和Spring?EL(多環(huán)境注入)

    SpringBoot@Profile注解和Spring?EL(多環(huán)境注入)

    為了方便, Spring還提供了 Profile機制, 使我們可以很方便地實現各個環(huán)境之間的切換,在使用DI來依賴注入的時候,能夠根據@profile標明的環(huán)境,將注入符合當前運行環(huán)境的相應的bean,本文通過示例代碼介紹SpringBoot@Profile注解和Spring?EL,需要的朋友可以參考下
    2024-02-02

最新評論

鄂托克前旗| 三门县| 扶余县| 安国市| 中西区| 定兴县| 长岛县| 上饶市| 淮南市| 托克逊县| 分宜县| 双江| 修水县| 阳信县| 固阳县| 吴江市| 六安市| 安仁县| 双流县| 吴堡县| 伊宁市| 额敏县| 仁化县| 娄底市| 上蔡县| 永春县| 庄河市| 温州市| 龙南县| 德格县| 抚松县| 昭苏县| 万载县| 广安市| 清丰县| 五河县| 建始县| 阿拉善左旗| 双鸭山市| 县级市| 郸城县|