JNI使用范例

简介:

1. JNI (Java Native Interface)Java本地接口
2. native
关键字:使用native所修饰的方法为本地方法,该方法只有声明,没有实现,表示该实现是由c/c++来提供的。 
3. jni
本质上就是java代码来调用动态链接库的过程(在Windows上,动态链接库就是一个dll文件,在Linux上,动态链接库是一个so文件,如果在Linux上,那么调用的动态链接库文件名必须以lib开始) 

4、实例

java程序调用HelloWorld.dll的C++动态链接库

 
  1. package com.alibaba.demo.jni; 
  2.  
  3. public class JniDemo { 
  4.     static
  5.         //不能加后缀, windows上面后缀为dll;在linux下为so,且必须以lib开头 
  6.         System.loadLibrary("HelloWorld"); 
  7.     } 
  8.     public native void output(); 
  9.      
  10.     public static void main(String[] args) { 
  11.         JniDemo jni = new JniDemo(); 
  12.         jni.output(); 
  13.     } 

 步骤1:先编译java -d . JniDemo.java

步骤2:使用javah命令生产c++的头文件:com_alibaba_demo_jni_JniDemo.h

javah com.alibaba.demo.jni.JniDemo,生产的头文件的代码如下:

 
  1. /* DO NOT EDIT THIS FILE - it is machine generated */ 
  2. #include <jni.h> 
  3. /* Header for class com_alibaba_demo_jni_JniDemo */ 
  4.  
  5. #ifndef _Included_com_alibaba_demo_jni_JniDemo 
  6. #define _Included_com_alibaba_demo_jni_JniDemo 
  7. #ifdef __cplusplus 
  8. extern "C" { 
  9. #endif 
  10. /* 
  11.  * Class:     com_alibaba_demo_jni_JniDemo 
  12.  * Method:    output 
  13.  * Signature: ()V 
  14.  */ 
  15. JNIEXPORT void JNICALL Java_com_alibaba_demo_jni_JniDemo_output 
  16.   (JNIEnv *, jobject); 
  17.  
  18. #ifdef __cplusplus 
  19. #endif 
  20. #endif 

步骤3:在C++中实现方法

除了引入自己的头文件外,还必须引入Java\jdk1.6.0_18\include\jni.h,在32位的环境下还需要引入Java\jdk1.6.0_18\include\win32\jni_md.h

 
  1. JNIEXPORT void JNICALL Java_com_alibaba_demo_jni_JniDemo_output  (JNIEnv *, jobject) 
  2.   printf("Hello World JNI!\n"); 

将编译完成的dll文件修改为HelloWorld.dll,并放入到classpath下面

步骤4:使用java com.alibaba.demo.jni.JniDemo执行程序,则此时打印出:Hello World JNI! 

基本任务完成 

 

 本文转自 tianya23 51CTO博客,原文链接:http://blog.51cto.com/tianya23/461483,如需转载请自行联系原作者

相关文章
|
6月前
|
存储 Java C++
[NDK/JNI系列02] JNI的设计原理与数据类型
[NDK/JNI系列02] JNI的设计原理与数据类型
48 0
[NDK/JNI系列02] JNI的设计原理与数据类型
JNA简单范例
JNA简单范例
89 0
|
C#
C#调用dll代码范例
C#调用dll代码范例
117 0
|
Java
JNI学习(3)——运行基于JNI的java程序
JNI学习(3)——运行基于JNI的java程序
97 0
JNI学习(3)——运行基于JNI的java程序
JNI中访问JList的代码
JNI中访问JList的代码
63 0
|
Java Linux Android开发
Java中使用JNI调用本地动态库的方法
在Java中,要使用动态库,就要使用到 JNI。首先来看看百度百科对JNI的描述:从Java1.1开始,Java Native Interface(JNI)标准成为Java平台的一部分,它允许Java代码和其他语言写的代码进行交互。
1364 0
|
Java C++
Java调用C/C++实现的DLL动态库——JNI
由于项目的需要,最近研究了java 调用DLL的方法,将如何调用的写于此,便于日后查阅: 采用的方法是JNI:Java Native Interface,简称JNI,是Java平台的一部分,可用于让Java和其他语言编写的代码进行交互。
1311 0