您的位置:首页 > 其它

JNI实例学习

2009-12-04 16:54 127 查看
最近看《深入Java虚拟机》看到Java本地接口,而且之前接触到一个应该使用JNI的程序,那是一个利用GPRS Modem发送手机短信的程序,由于发送短信要对串口编程,明显不是Java的强项,所以用用C++做了发送短信的程序,本来利用JNI就可以实现Java调用C++,但是实现者却利用Socket通信来实现......今天再次看到JNI,想亲手试试看。

开发步骤:

1. 编写Java程序

2. 编译该Java程序

3. javah生成.h头文件

4. 生成动态链接库文件

5. 运行Java程序测试

1. 编写Java程序

编写MyNative.java 并保存,比如在C盘下

public class MyNative{

static{

System.loadLibrary("MyNative");
}

public native static void HelloWord();

public static void main(String[] argc) {

HelloWord();
}

}


2. 编译该Java程序

C:/>javac MyNative.java

3. javah生成.h头文件

C:/>javah MyNative

生成MNative.h 文件,内容如下:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class MyNative */

#ifndef _Included_MyNative
#define _Included_MyNative
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class:     MyNative
* Method:    HelloWord
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_MyNative_HelloWord
(JNIEnv *, jclass);

#ifdef __cplusplus
}
#endif
#endif


4. 生成动态链接库文件

打开Microsoft Visual Studio 2008

New -> Project,并选Win32 Project,如下图





在弹出窗口中点击Next,出现如下窗口,选择Dll,点击Finish



打开MyNative.cpp,编辑代码如下

// MyNative.cpp : Defines the exported functions for the DLL application.
//

#include "stdafx.h"
#include <stdio.h>

#include "MyNative.h"

JNIEXPORT void JNICALL Java_MyNative_HelloWord  (JNIEnv *env, jclass jobject)

{

printf("hello word!/n");

}


添加MyNative.h文件到工程的头文件目录如下图(我是将该文件拷贝到此路径下后再添加)



将%JAVA_HOME%/include下的所有头文件,.h文件都拷贝到Microsoft Visual Studio 2008 的include路径下



之后点击Build->Build Solution,状态栏显示Build succeeded构建成功。在工程的Debug目录下生成了MyNative.dll文件

5. 运行Java程序测试

将MyNative.dll文件拷贝到MyNative.java同一路径下,执行后得到结果



总结
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: