`
JavaSam
  • 浏览: 952012 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java中对native的认识(JNI)

    博客分类:
  • JAVA
 
阅读更多

Java不是完美的,Java的不足除了体现在运行速度上要比传统的C++慢许多之外,Java无法直接访问到操作系统底层(如系统硬件等),为此Java使用native方法来扩展Java程序的功能。 

  可以将native方法比作Java程序同C程序的接口,其实现步骤: 

  1、在Java中声明native()方法,然后编译; 

  2、用javah产生一个.h文件; 

  3、写一个.cpp文件实现native导出方法,其中需要包含第二步产生的.h文件(注意其中又包含了JDK带的jni.h文件); 

  4、将第三步的.cpp文件编译成动态链接库文件; 

  5、在Java中用System.loadLibrary()方法加载第四步产生的动态链接库文件,这个native()方法就可以在Java中被访问了。 

  JAVA本地方法适用的情况 

  1.为了使用底层的主机平台的某个特性,而这个特性不能通过JAVA API访问 

  2.为了访问一个老的系统或者使用一个已有的库,而这个系统或这个库不是用JAVA编写的 

  3.为了加快程序的性能,而将一段时间敏感的代码作为本地方法实现。 

  首先写好JAVA文件 

  /* 

  * Created on 2005-12-19 Author shaoqi 

  */ 

  package com.hode.hodeframework.modelupdate; 

  public class CheckFile 

  { 

  public native void displayHelloWorld(); 

  static 

  { 

  System.loadLibrary("test"); 

  } 

  public static void main(String[] args) { 

  new CheckFile().displayHelloWorld(); 

  } 

  } 

  然后根据写好的文件编译成CLASS文件 

  然后在classes或bin之类的class根目录下执行javah -jni com.hode.hodeframework.modelupdate.CheckFile, 

  就会在根目录下得到一个com_hode_hodeframework_modelupdate_CheckFile.h的文件 

  然后根据头文件的内容编写com_hode_hodeframework_modelupdate_CheckFile.c文件 

  #include "CheckFile.h" 

  #include 

  #include 

  JNIEXPORT void JNICALL Java_com_hode_hodeframework_modelupdate_CheckFile_displayHelloWorld(JNIEnv *env, jobject obj) 

  { 

  printf("Hello world!\n"); 

  return; 

  } 

  之后编译生成DLL文件如“test.dll”,名称与System.loadLibrary("test")中的名称一致 

   vc的编译方法:cl -I%java_home%\include -I%java_home%\include\win32 -LD com_hode_hodeframework_modelupdate_CheckFile.c -Fetest.dll 

  最后在运行时加参数-Djava.library.path=[dll存放的路径]

0
0
分享到:
评论

相关推荐

    C++JNI多线程回调java

    总的来说,理解和实现"C++ JNI多线程回调java"涉及到对JNI接口的深入理解,对多线程编程的掌握,以及对Java并发模型的认识。这是一个高级的跨语言编程话题,需要开发者具备扎实的C++和Java基础。在实际项目中,这样...

    Java中Native关键字的作用

     一、认识 native 即 JNI,Java Native Interface  凡是一种语言,都希望是纯。比如解决某一个方案都喜欢单单这个语言来写即可。Java平台有个用户和本地C代码进行互操作的API,称为Java Native Interface (Java...

    android JNI学习三实例

    - **异常处理**:在JNI中调用Java方法时,如果抛出异常,需要捕获并适当地处理。 - **性能优化**:虽然JNI可以提升性能,但过度使用可能导致代码复杂性和维护难度增加。合理评估何时使用JNI。 总结,通过"android ...

    Windows下JNI初学实例

    这篇教程将带你了解如何在Windows环境下创建一个简单的JNI项目,让你对JNI有一个初步的认识。 首先,我们需要准备以下组件: 1. **HelloWorld.java** - 这是我们的Java源代码,它包含了JNI函数的声明和Java方法...

    Java中使用Jacob实现Windows下语音合成并生成音频文件示例代码.rar

    为了进一步学习和应用这个示例,你需要具备Java编程基础,了解JNI原理,以及对Windows COM组件有一定的认识。如果你遇到任何问题,可以查阅Jacob的官方文档,或者搜索相关的Java和Windows语音合成教程,这将帮助你更...

    传智播客_Andorid_JNI视频_day01视频

    8. **异常处理**:解释如何在JNI中捕获和处理Java异常。 9. **线程支持**:讨论在JNI中创建和管理线程,以及如何在Java和本地代码之间同步。 10. **内存管理**:说明如何在JNI中分配和释放内存,避免内存泄漏。 ...

    android_JNI学习六

    3. **`JNIEnv`指针**:在JNI中,`JNIEnv`是一个指向结构体的指针,包含了执行Java方法、访问Java对象等操作所需的所有函数。它是每次Java方法调用时由JVM提供的,用于在本地代码和Java代码之间进行通信。 4. **JNI...

    Android.JNI - NDKHelloWorld

    《Android.JNI - NDKHelloWorld》 在Android开发中,JNI(Java Native Interface...通过本教程中的“NDKHelloWorld”实例,你应该对Android JNI和NDK有了初步的认识,进一步的学习和实践将帮助你更好地掌握这一技术。

    android_JNI学习二

    Android JNI(Java Native Interface)是Android开发中的一个重要概念,它为Java代码和其他语言(如C++、C)的代码提供了一个交互的桥梁。在Android应用开发中,JNI被广泛用于性能优化、调用系统底层库或者利用已有...

    Java调用动态库.pdf

    JNI(Java Native Interface)是一种标准的 Java_Native Interface,用于实现 Java 代码与 native 代码的交互。使用 JNI 调用动态库需要按照以下步骤进行: 1. 首先,需要在 VS2008 中编写测试动态库 testDll,添加...

    android_JNI学习一实例

    Android JNI(Java Native Interface)是Android系统中用于Java与C/C++代码交互的桥梁,它允许开发者在Android应用中调用本地(Native)代码,实现性能优化或利用已有的C/C++库。在这个实例中,我们将深入理解JNI的...

    android JNI学习四实例

    此实例演示了如何在JNI中处理各种Java数据类型,如整型、浮点型、字符串等。Java数据类型需要转换为对应的JNI数据类型,例如`jint`、`jdouble`、`jobject`等。同时,本地方法可以接受Java对象作为参数,例如数组或...

    android_JNI学习五

    在Android开发中,JNI(Java Native Interface)是一个关键的技术,它允许Java代码和其他语言写的代码进行交互。JNI在Android世界中的应用广泛,特别是在性能优化、调用本地库、与硬件设备交互等方面。本教程...

    JAVA Programe.rar_Java2

    Java编程是IT领域中最受欢迎的编程语言之一,尤其在企业级应用开发中占据主导地位。"JAVA Programe.rar_Java2"这个...同时,结合《java2参考大全》的理论部分,可以形成理论与实践的完美结合,对Java编程有更深的认识。

    JAVA2实用教程代码及例子(青华大学出版社)

    7. **JNI(Java Native Interface)**:如果你需要与C/C++库进行交互,JNI提供了一种方式,让JAVA代码能够调用本地方法。 8. **Swing和AWT**:这部分内容会介绍JAVA的图形用户界面(GUI)编程,如如何使用Swing和AWT...

    JAVA 开发大恒DHQP300视频采集卡DEMO

    通过运行DEMO,开发者和使用者可以直观地了解如何集成DHQP300视频采集卡到自己的系统中,同时也能对JAVA和C++的结合使用有一个清晰的认识。 总的来说,这个资源对于正在从事JAVA环境下视频处理和采集卡开发的人员来...

    CSTR&Handle Java 客户端.rar

    相信看完之后,大家对NDK开发有了一个概念上的认识了,那么接下来我们需要再深入一下NDK的开发,我们知道NDK开发就是使用JNI这层“协议”在Java和C之间起个“桥梁”的作用,将Java和Native C之间联立起来,让Java和C...

    Java实现vimJava实现的vimdemo

    3. **JNI(Java Native Interface)**:由于Vim原生支持许多复杂的文本处理和编辑命令,如果要在Java中实现类似的功能,可能需要通过JNI调用C或C++编写的库,尤其是涉及到终端控制和文本模式交互的部分。 4. **GUI...

    JAVA基础教程中英文课件

    13. **JNI(Java Native Interface)**:当需要调用本地(非Java)代码时,JNI提供了一种桥梁。它可以让你编写C/C++代码并与Java代码交互。 14. **Java SE、Java EE与Java ME**:Java分为三个版本,SE(Standard ...

    Java语言入门书籍

    这包括Java的创始人、版本迭代和应用领域,让读者对Java有一个全面的认识。 第二章会讲解Java环境的搭建,包括安装Java Development Kit (JDK)、配置环境变量,以及设置开发工具,如Integrated Development ...

Global site tag (gtag.js) - Google Analytics