java native interface(java 本地方法调用)
2012-03-22 21:45
344 查看
在开发中,有时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();
}
}
运行此文件,结果如下:
此时大功告成!
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();
}
}
运行此文件,结果如下:
此时大功告成!
相关文章推荐
- java native interface JNI 调用Java方法
- java native interface JNI 调用Java方法
- Java Native Interface--在本地方法中与Java进行交互一
- java native:Java本地方法调用(jni方式)
- JavaNativeAccess-----------一种方便的调用本地方法的技术
- java JNI native本地方法调用
- Java native 本地方法调用
- java本地方法如何调用其他程序函数,方法详解2
- (Java native关键字)调用本地 C 代码的 Java 代码示例
- JAVA通过JNI调用本地C语言方法
- Android JNI开发(2)--native方法调用Java方法
- native 调用 java 类中的一个静态方法
- (八)React Native实现调用android原生java方法并实现广播的发送和接受
- WebView js 调用Java本地方法
- PhoneGap(Cordova)之js调用本地native的方法
- Dalvik虚拟机中Java native方法的调用过程
- 在 Windows 中实现 Java 本地方法-Java native 关键词
- (转)javabean操作文件正确,但是Jsp调用javabean时文件路径出错问题解决之JavaBean访问本地文件实现路径无关实现方法
- java本地调用cmd,shell命令,远程调用Linux执行命令方法总结
- java本地调用cmd,shell命令,远程调用Linux执行命令方法总结