在windows下使用Netbeans开发Java JNI程序
关键字: Java JNI Netbeans我选择的开发工具链是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
完成后在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》
发表评论
- 浏览: 17222 次
- 性别:

- 来自: 杭州

- 详细资料
搜索本博客
我的相册
共 7 张
最新评论
-
[摘]正确的创业者心态
ddd 写道》不过,如果这旧调本身不错,多弹几次,又有什么关系呢? 楼主看过古龙 ...
-- by spyker -
[摘]正确的创业者心态
》不过,如果这旧调本身不错,多弹几次,又有什么关系呢?楼主看过古龙的书,鉴定完毕 ...
-- by ddd -
无意中网上看到一篇关于ge ...
有很多必要的功能必须使用特定的插件,而这些插件又不是缺省安装必带的,所以用起来很 ...
-- by SteveGY -
无意中网上看到一篇关于ge ...
姜太公 写道可惜它的给关键字等加的颜色太难看。还有很多重复的gedit失败的地方 ...
-- by seen -
无意中网上看到一篇关于ge ...
可惜它的给关键字等加的颜色太难看。还有很多重复的
-- by 姜太公






评论排行榜