JNI开发简单入门篇

发表于:2007-05-25来源:作者:点击数: 标签:开发时候有的前言JNI
前言 在有的时候根据项目的需要不可以避免用到本地的东西,最常见的就是 java 想访问Window本地的东东,比如想调节鼠标移动速度、改变窗体底色、甚至用javaApplet做个基于windows的远程控制象pcanywhere那样,怎么办?下面就用个最简单的例子来入门。 步骤 写
前言

在有的时候根据项目的需要不可以避免用到本地的东西,最常见的就是java想访问Window本地的东东,比如想调节鼠标移动速度、改变窗体底色、甚至用javaApplet做个基于windows的远程控制象pcanywhere那样,怎么办?下面就用个最简单的例子来入门。

步骤
写一个HelloWorld.java
class HelloWorld {
public native void displayHelloWorld();//定义本地方法


static {
System.loadLibrary("hello");//调入本地库
}

public static void main(String[] args) {
new HelloWorld().displayHelloWorld();
}

}
以上代码看起来好象和以前写的有点区别,出现了native关键字,但是不用太深究,你可以把这段代码看成是调用本地库的桥。
然后java HelloWorld.java生成HelloWorld.class

生成C的头文件
很简单,就用jdk提供的javah命令javah HelloWorldclass(注意,如果运行出错就把classpath指向class),成功运行后会出现HelloWorld.h
/* DO NOT EDIT THIS FILE - it is machine generated */

#include
/* Header for class HelloWorld */



#ifndef _Included_HelloWorld

#define _Included_HelloWorld

#ifdef __cplusplus

extern "C" {

#endif
/*
* Class: HelloWorld
* Method: displayHelloWorld
* Signature: ()V
*/

JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld
(JNIEnv *, jobject);


#ifdef __cplusplus

}

#endif

#endif


编写C文件并编译成DLL
#include

#include "HelloWorld.h"

#include

#include



JNIEXPORT void JNICALL

Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj)

{
printf("Hello world!\n");//在这里实现java类中定义的方法
MessageBeep(0);//调用到win本地,会发一声响
return;

}

原文转自:http://www.ltesting.net

评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)