zoukankan      html  css  js  c++  java
  • JNI-入门之一

    下面我们开始编写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语言之间进行交互。

    引于-----mingjava

  • 相关阅读:
    python深浅拷贝
    pyinstaller打包py文件为exe方法
    python学习笔记3-关于文件的复制、重命名、移动、删除操作
    BeautifulSoup4 print() 输出中文乱码解决方法
    进程和线程的开启效率
    python3 使用pymysql
    python3 __file__
    Flask Template ( 模板学习)
    响应对象
    nginx 以及 uwsgi 的配置
  • 原文地址:https://www.cnblogs.com/oracleloyal/p/5288211.html
Copyright © 2011-2022 走看看