如何在JAVA中调用windows API
JAVA以其跨平台的特性深受人们喜爱,而又正由于它的跨平台的目的,使得它和本地机器的各种内部联系变得很少,约束了它的功能。解决JAVA对本地操作的一种方法就是JNI(JAVA NATIVE INTERFACE)。
在Windows平台上实现Java本地方法
在Windows平台上创建本地方法共有如下所示的五个步骤:
1、写Java代码
2、译Java代码
3、创建C头文件(.h 文件)
4、编写C代码并创建动态连接库(DLL)
5、运行应用程序
编写java代码:
要在代码中使用本地方法,要额外增加两个部分。
第一个部分:必须声明本地方法。声明方法与一般的函数声明一样,但必须指定native关键字,如下所示
public native void mynativefunction();
第二个部分:必须显式地加载本地代码库。为了加载本地代码库,必须在类的一个静态块中加载这个库。加载库和使用库的方法如下所示:
class NativeExample{
static{
System.loadLibrary ("mynativelib");
}
public static void main(String args[]){
mynativelib mylib=new mynativelib();
ativefunction();
} java创建文件
}
编译Java代码
使用Java编译工具(javac)编译*.java代码
创建 C 头文件(.件)
为了将C代码用作Java的本地方法,必须使用特殊的函数声明,以便在C代码编译的时候,能够为Java所使用。Java编译器的javah工具将根据Java代码生成相应的头文件(.件),这些头文件必须在C代码中包含。
头文件创建方法为:
javah –jni <类名>
编写C代码并创建动态连接库(DLL)
可以使用VC++6.0建立动态连接库。
在新建工程中选择Win32 Dynamic-Link Library,建立一个Simple DLL Project,把刚才建立的头文件包含进工程,并在工程中加入需要实现的本地方法,函数头部分同头文件中声明的那样。在函数中加入功能代码。代码完成后,进行编译,在Tools下拉式菜单的Options设置下设置JDK的include目录
编译通过后,制作一个release版本的DLL,放到Windows 的 PATH 环境变量所指定的路径中或程序运行的目录下,确保程序可以到这个DLL文件。
运行应用程序
至此,全部工作完成,像平时一样运行Java程序,就可以实现对本地方法的调用:
java <类名>
详细描述如下
我的工具:JBUILDERX及其内置的jdk1.4及resin2.1调试服务器,创天中文vc++6.0
1、java文件:
st;
public class MyNative {
public MyNative() {
}
public native void Hello();
public static void main(String []args){
MyNative mn=new MyNative();
mn.Hello();
}
static{
System.loadLibrary("MyNative");
}
}
用jbuilderX编译它,然后右边选中MyNative.java,选属性,勾选Generate JNI head file,options选JNI for jdk1.1 and later,确定。这时,在右边的工具栏里的MyNative.java前面就多了一个可以展开的按钮,下面是刚产生的 JNI 头文件[web_test_MyNative.h],如果没有,请刷新或者再编译,应该就有了。
web_test_MyNative.h:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class web_test_MyNative */
#ifndef _Included_web_test_MyNative
#define _Included_web_test_MyNative
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: web_test_MyNative
* Method: Hello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_web_test_MyNative_Hello
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
打开vc++6.0工具,选择新建工程--Win32 Dynamic-Link Library,工程名为MyNative;
将web_test_MyNative.h拷至工程目录MyNative下,并从jdk/include下面copy所有头文件包括win32目录下的至你的vc++安装目录/MFC/Include下面;
然后新建文件C++ source file,命名为MyNative。
MyNative.cpp:
# include
# include
# include "web_test_MyNative.h"
JNIEXPORT void JNICALL Java_web_test_MyNative_Hello
(JNIEnv *, jobject)
{
printf("Hello World!\n");
return;
}
compile MyNative.cpp
选择编译,构件MyNative.dll
到你的电脑中工程目录下的debug目录获取MyNative.dll,把它copy到jdk1.4/biin目录下。
不需作任何修改,你就可以在JbuilderX中Run MyNative
显示结果:
Hello World!
你会了么?
注意我们这里include了 jni.h和刚才得到的HelloWorld.件。因此你要在VC++里面设置好,jni.h在JAVA_HOME/include里面。编译通过后再生成dll文件
Java  Native  Interface 

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。