在windows下使用Netbeans开发Java JNI程序

我选择的开发工具链是JDK1.6 Netbeans5.5 Netbeans-mobility-5.5 Netbeans-cnd-5_5-windows Sun_java_wireless_toolkit-2_5-beta2-windows 如下
这篇主要是实战在netbeans下的Java JNI程序开发。
为什么JNI重要
在java中直接访问硬件驱动,操作系统的接口就必须通过JNI方式。
本实践中需要的软件有:
J2SE Development Kit (JDK™) 6.0 (download)

NetBeans IDE 5.5 (download)
NetBeans C/C++ Pack 5.5 (download)
Cygwin (download)

开始实战:
1. 安装Cygwin
Cygwin程序作用是在windows平台上模拟一个unix shell环境,让gcc等unix工具能在windows上运行。
进入Cygwin安装包选择界面时选择gcc-core, gcc-g++, gdb,make这几项(所要依赖的程序包Cygwin程序会自动选中的)。如图下:
对了,还要配置一下环境变量,让命令行能找cygwin的程序。把cygwin的bin目录放入系统path中就OK了。

2. 在Netbean中新建一个java application,如:JavaJNIDemo。
内容可以如下:
/**
*
* @author Xiaofeng Wang
*/
public class Main {
public native int addTwoNumbers(int one, int two);
public native int multiplyTwoNumbers(int one, int two);

static {
System.load("D:\\NetBeans\\JNIDynamicLibraryDemo\\dist\\JNIDynamicLibraryDemo.dll");//动态链接库的位置
}

/** Creates a new instance of Main */
public Main() {
}

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Main main = new Main();
int num1 = 20;
int num2 = 50;

System.out.println(num1 + " + " + num2 + " = " + main。addTwoNumbers(num1, num2));
System.out.println(num1 + " * " + num2 + " = " + main。multiplyTwoNumbers(num1, num2));
}

}

3. 接着要生成头文件
在命令行中用javah程序生成上面java文件的头文件。
命令格式如下:
javah -o d:\ JNIDemoNative.h –jni -classpath <projects_root></projects_root> \JavaJNIDemo\build\classes javajnidemo.Main
完成后在D盘根目录下会找到JNIDemoNative。h文件,内容如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class javajnidemo_Main */

#ifndef _Included_javajnidemo_Main
#define _Included_javajnidemo_Main
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: javajnidemo_Main
* Method: addTwoNumbers
* Signature: (II)I
*/
JNIEXPORT jint JNICALL Java_javajnidemo_Main_addTwoNumbers
(JNIEnv *, jobject, jint, jint);

/*
* Class: javajnidemo_Main
* Method: multiplyTwoNumbers
* Signature: (II)I
*/
JNIEXPORT jint JNICALL Java_javajnidemo_Main_multiplyTwoNumbers
(JNIEnv *, jobject, jint, jint);

#ifdef __cplusplus
}
#endif
#endif

4. 安装配置NetBeans C/C++ Pack 5.5插件
安装完NetBeans C/C++ Pack 5.5插件后,新建一个C/C++项目(如:JNIDynamicLibraryDemo),并配置项目属性如下:
还要配置编译参数:
内容为-mno-cygwin -Wl,--add-stdcall-alias -shared -m32
-mno-cygwin 让编译出来的DLL不依赖cygwin
-Wl,--add-stdcall-alias 不使用此参数会出现链接错误
-shared 生成动态库
-m32 编译为32位程序

还要配置dll的输出名称(如:JNIDynamicLibraryDemo.dll)

把上一步中生成的头文件导入到项目中,并新建JNIDynamicLibraryDemo.c文件,内容如下:
#include "JNIDemoNative.h"

JNIEXPORT jint JNICALL Java_javajnidemo_Main_addTwoNumbers(JNIEnv * env, jobject obj, jint one, jint two) {
return (one + two);
}

JNIEXPORT jint JNICALL Java_javajnidemo_Main_multiplyTwoNumbers(JNIEnv * env, jobject obj, jint one, jint two) {
return (one * two);
}

5. 编译并运行项目
编译c项目,并输出dll,核对java项目中dll的路径是否正确,如正确运行项目。结果如下:
到此完成。

参考资料:
Beginning JNI with NetBeans™ C/C++ Pack 5.5
《Java高级编程:JDK5》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值