java native interface(java 本地方法调用)

  在开发中,有时java并不能胜任所有的工作,比如说java swing中不能直接操作任务栏,java不能直接操作进程等,而java 本地调用接口就可以解决这个问题,一种思想的引进带给人们好的一面,那么它必定会有坏的一面,jni也同样如此,它在增强运行效率的同时,也给程序的可移植性带来影响,下面我来讲解jni的一个小小的例子(在命令行中输出Hello World):

 Step 01:

安装jdk,配置好环境变量。

 Step 02:

    在eclipse中新建一个jni的java project,在src目录下新建HelloWorld.java,代码如下:

   public classHelloWorld {

      public native void helloWorld();

}

   Step 03:

   用javah命令生成HelloWorld.h文件,我的eclipse工作目录在F:\eclipseworkbench下,命令如下:

   

其中–d F:\eclipseworkbench\jni是指定生成的HelloWorld.h的输出路径,执行命令完成后,在F:\eclipseworkbench\jni目录下会多出一个HelloWorld.h的文件,如图:

 


Step 04:生成相应的dll动态链接库,先新建一个HelloWorld的Win32Project,我是建在F盘,如下:


点击OK--->next---->在application type里面选择DLL,如下:



点击Finish。

建好项目后,打开自己安装jdk的目录,打开include文件夹,将里面的 jni.h文件,jawt_md.h文件和jni_md.h文件复制到刚建项目的文件夹下,同时将刚用javah命令生成的HelloWorld.h文件也复制到此文件夹下,如图所示:


在VS中将刚才的四个.h文件引入项目中,如图所示:


打开HelloWorld.h文件,修改如下:

 /* DO NOTEDIT THIS FILE - it is machine generated */

#include "stdafx.h"

#include "jni.h"

 

/* Header for classHelloWorld */

 

#ifndef_Included_HelloWorld

#define_Included_HelloWorld

#ifdef__cplusplus

extern "C" {

#endif

/*

 * Class:    HelloWorld

 * Method:   helloWorld

 * Signature: ()V

 */

JNIEXPORT voidJNICALL Java_HelloWorld_helloWorld

  (JNIEnv *, jobject);

 

#ifdef__cplusplus

}

#endif

#endif

打开HelloWorld.cpp文件,修改如下:

// HelloWorld.cpp : Definesthe exported functions for the DLL application.

//

 

 

#include "stdafx.h"

#include "HelloWorld.h"

 

JNIEXPORT voidJNICALL Java_HelloWorld_helloWorld

  (JNIEnv *, jobject)

{

   printf("Hello World");

}

 

 

再Build该项目,就会在该项目的Debug文件夹下看到HelloWorld.dll文件,如图所示:


将此HelloWorld.dll文件复制到System32目录下。

  Step 05:

运行java文件,修改HelloWorld.java如下

public classHelloWorld {

   public native void helloWorld();

 

   static {

      System.loadLibrary("HelloWorld");

   }

 

   public static void main(String[] args) {

        new HelloWorld().helloWorld();

   }

}

运行此文件,结果如下:


此时大功告成!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值