百科介绍:JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++)。从Java1.1开始,JNI标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他编程语言,只要调用约定受支持就可以了。使用java与本地已编译的代码交互,通常会丧失平台可移植性。但是,有些情况下这样做是可以接受的,甚至是必须的。例如,使用一些旧的库,与硬件、操作系统进行交互,或者为了提高程序的性能。JNI标准至少要保证本地代码能工作在任何Java 虚拟机环境。
一旦使用JNI,JAVA程序就丧失了JAVA平台的两个优点:
1、程序不再跨平台。要想跨平台,必须在不同的系统环境下重新编译本地语言部分。
2、程序不再是绝对安全的,本地代码的不当使用可能导致整个程序崩溃。一个通用规则是,你应该让本地方法集中在少数几个类当中。这样就降低了JAVA和C之间的耦合性。
1
2
3
4
5
6
7
8
9
|
public
class
HelloWorld {
public
native
void
displayHelloWorld();
//所有native关键词修饰的都是对本地的声明
static
{
System.loadLibrary(
"hello"
);
//载入本地库
}
public
static
void
main(String[] args) {
new
HelloWorld().displayHelloWorld();
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
/*DO NOT EDI TTHIS FILE - it is mach inegenerated*/
#include
/*Header for class HelloWorld*/
#ifndef_Included_HelloWorld
#define_Included_HelloWorld
#ifdef__cplusplus
extern
"C"
{
#endif
/*
*Class:HelloWorld
*Method:displayHelloWorld
*Signature:()V
*/
JNIEXPORTvoidJNICALL
Java_HelloWorld_displayHelloWorld(JNIEnv*,jobject);
#ifdef__cplusplus
}
#endif
#endif
|
1
2
3
4
5
6
7
8
9
10
11
|
#include"jni.h"
#include"HelloWorld.h"
//#includeotherheaders
JNIEXPORT
void
JNICALL
Java_HelloWorld_displayHelloWorld(JNIEnv*env,jobject obj)
{
printf
(
"Helloworld!\n"
);
return
;
}
|
http://www.cnblogs.com/charley_yang/archive/2011/03/13/1982516.html
详见http://download.csdn.net/download/ltbook/10163747
http://blog.csdn.net/qinjuning/article/details/6696533