Java Native API Demo
本文档使用一个简单例子演示一下如何使用Java Native API。
程序的功能:用户输入直角三角形的两个直角边,程序输出斜边的长度。
步骤:
1:编写Java类:
类名:NativeTest.java
class NativeTest
{
public static void main(String [] args)
{
NativeTest aTest=new NativeTest();
int i0=Integer.valueOf(args[0]).intValue();
int i1=Integer.valueOf(args[1]).intValue();
double d=aTest.nativeHypotenuse(i0,i1);
System.out.println("the value for the Hypotenuse for a triangle of sides "+args[0]+" and "+args[1]+ " is "+d);
}
public native double nativeHypotenuse(int i,int j);
static
{
System.loadLibrary("NativeTest");
}
}
说明:
1、 在该Java类的main函数中,首先生成该类的一个实例,然后接受两个参数做为直角三角形的两个直角边,然后调用一个Native方法:nativeHypotenuse,计算直角三角形的斜边。该方法使用C语言实现。
2、 调用Native方法nativeHypotenuse的方式同调用Java类的其他方法完全相同。如:
double d=aTest.nativeHypotenuse(i0,i1);
3、 在Java的类文件中,首先要声明一个Native方法,方式如下:
public native double nativeHypotenuse(int i,int j);
在该方法中不包含任何代码(具体代码在C语言中实现,并且作为DLL提供),并且在方法的声明之后紧跟一个分号。
4、 为了确保Java虚拟机在首次使用该类的时候将DLL装载到内存,需要在包含这个Native方法的类中使用静态初始化程序块。本例中为:
static
{
System.loadLibrary("NativeTest");
}
其中NativeTest为DLL文件的名字
2:使用javah
在DOS窗口中运行:
javah –jni NativeTest
运行上述命令之后,在当前目录中生成一个C语言的头文件:
NativeTest.h。
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class NativeTest */