zoukankan      html  css  js  c++  java
  • (转)JNI入门教程之HelloWorld篇 .

    转: http://blog.csdn.net/mingjava/article/details/180946

    本文讲述如何使用JNI技术实现HelloWorld,目的是让读者熟悉JNI的机制并编写第一个HelloWorld程序。

        Java Native Interface(JNI)是Java语言的本地编程接口,是J2SDK的一部分。在java程序中,我们可以通过JNI实现一些用java语言不便实现的功能。通常有以下几种情况我们需要使用JNI来实现。

    • 标准的java类库没有提供你的应用程序所需要的功能,通常这些功能是平台相关的
    • 你希望使用一些已经有的类库或者应用程序,而他们并非用java语言编写的
    • 程序的某些部分对速度要求比较苛刻,你选择用汇编或者c语言来实现并在java语言中调用他们

        在《java核心技术》中,作者提到JNI的时候,建议不到万不得已不要使用JNI技术,一方面它需要你掌握更多的知识才可以驾驭,一方面使用了JNI你的程序就会丧失可移植性。在本文我们跳过JNI的底层机制,读者最好先把它想象为本地代码和java代码的粘合剂。   

        下面我们开始编写HelloWorld程序,由于涉及到要编写c/c++代码因此我们会在开发中使用Microsoft VC++工具。

    1. 编写java代码
      我们在硬盘上建立一个hello目录作为我们的工作目录,首先我们需要编写自己的java代码,在java代码中我们会声明native方法,代码非常简单。如下所示
      class HelloWorld
      {
          public native void displayHelloWorld();
          static {
              System.loadLibrary("hello");
          }
         
          public static void main(String[] args) {
              new HelloWorld().displayHelloWorld();
          }
      }
      注意我们的displayHelloWorld()方法的声明,它有一个关键字native,表明这个方法使用java以外的语言实现。方法不包括实现,因为我们要用c/c++语言实现它。注意System.loadLibrary("hello")这句代码,它是在静态初始化块中定义的,系统用来装载hello共享库,这就是我们在后面生成的hello.dll(如果在其他的操作系统可能是其他的形式,比如hello.so)
    2. 编译java代码
      javac HelloWorld.java  生成HelloWorld.class文件
    3. 创建.h文件
      这一步中我们要使用javah命令生成.h文件,这个文件要在后面的c/c++代码中用到,我们运行
      javah HelloWorld。这样我们可以看到在相同目录下生成了一个HelloWorld.h文件,文件内容如下
      在此我们不对他进行太多的解释。
      /* DO NOT EDIT THIS FILE - it is machine generated */
      #include <jni.h>
      /* Header for class HelloWorld */
      #ifndef _Included_HelloWorld
      #define _Included_HelloWorld
      #ifdef __cplusplus
      extern "C" {
      #endif
      /*
       * Class:     HelloWorld
       * Method:    displayHelloWorld
       * Signature: ()V
       */
      JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld
        (JNIEnv *, jobject);
      #ifdef __cplusplus
      }
      #endif
      #endif
    4. 编写本地实现代码
      在这部分我们要用C/C++语言实现java中定义的方法,我们在VC++中新建一个Project,然后创建一个HelloWorldImp.cpp文件,内容如下
      #include <jni.h>
      #include "HelloWorld.h"
      #include <stdio.h>

      JNIEXPORT void JNICALL
      Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj)
      {
          printf("Hello world!/n");
          return;
      }
      注意我们这里include了 jni.h和刚才得到的HelloWorld.h文件。因此你要在VC++里面设置好,jni.h在JAVA_HOME/include里面。编译通过后再生成hello.dll文件。
    5. 运行java程序
      把上面生成的hello.dll文件复制到我们的工作目录,这时候我们的目录中包括HelloWorld.java,HelloWorld.class和hello.dll文件。运行java HelloWorld命令,则可在控制台看到Hello world|
      的输出了。

        JNI是一门复杂,有趣且富有挑战性的技术,我们在后面的几篇文章中将说明如何在java语言和Native语言之间进行交互。

  • 相关阅读:
    Two Sum II
    Subarray Sum
    Intersection of Two Arrays
    Reorder List
    Convert Sorted List to Binary Search Tree
    Remove Duplicates from Sorted List II
    Partition List
    Linked List Cycle II
    Sort List
    struts2结果跳转和参数获取
  • 原文地址:https://www.cnblogs.com/wangle1001986/p/3929234.html
Copyright © 2011-2022 走看看