java JNI本地方法调用的使用

JNI 是Java提供的调用native本地方法的编程接口,可以实现对其它非java语言(C,C++)编写的接口的调用。

可能使用到的场景有:

  • 标准的java类库没有提供你的应用程序所需要的功能,通常这些功能是平台相关的
  • 你希望使用一些已经有的类库或者应用程序,而他们并非用java语言编写的
  • 程序的某些部分对速度要求比较苛刻,你选择用汇编或者c语言来实现并在java语言中调用他们
具体的实现实现方式比较简单在JAVA类当中只需要使用native关键定义好调用的方法,具体的实现通过其他语言编写后编成动态库,在JAVA代码中加载该动态库就可以了。

Java代码如下

package studyJNIMain;
public class Main {
static {
   System.out.println(System.getProperty("java.library.path"));
   System.loadLibrary("test"); 
}
public static void main(String[] args) {

   Main m=new Main();
   m.test(1);
}
native public int test(int in);
}

System.loadLibrary是用来加载动态库的,必须放在stack{}语句块中。

调用步骤如下:

1.编写java代码,编译生成main.class

2.打开命令行,进入到存放class文件的根目录,使用命令javah -jni studyJNIMain.Main。会生成一个studyJNIMain_Main.h文件。打开该头文件,我们会发现定义了一个方法 Java_studyJNIMain_Main_test(JNIEnv *, jobject, jint);


#include <jni.h>
/* Header for class studyJNIMain_Main */


#ifndef _Included_studyJNIMain_Main
#define _Included_studyJNIMain_Main
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     studyJNIMain_Main
 * Method:    test
 * Signature: (I)I
 */
JNIEXPORT jint JNICALL Java_studyJNIMain_Main_test
  (JNIEnv *, jobject, jint);


#ifdef __cplusplus
}
#endif
#endif

      3.利用vc编写test.dll。选择new->projects(选择Win32 Dynamic-Link Library)->OK->An ampty DLL project->Finish。

      4.把studyJNIMain_Main.h加载到项目当中,创建test.cpp包含studyJNIMain_Main.h头文件,实现Java_studyJNIMain_Main_test(JNIEnv *, jobject, jint)方法就行了,编译生成动态库test.dll。

      5.把test.dll放在System.getProperty("java.library.path")获取的地址当中,运行mian。




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值