JNI是Java Native Interface的缩写,中文为JAVA本地调用。从Java1.1开始,Java
Native Interface(JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。
主要运行过程:创建Java文件---->使用 javah 编译生成相应的头文件供vs2010 中使用--->使用vs2010 编译生成dll文件
我的运行环境:
a、Myeclipse 10 中创建了Web项目TestDll 路径: D:\Program Files\MyEclipse10\MyEclipse 10\DLLworkspace\TestDll
b、VS2010 中创建了项目Util,路径: C:\Users\Admin\Documents\Visual Studio 2010\Projects\DLLTest\Util
c、tomcat目录:D:\apache-tomcat-6.0.29
d:jdk环境:C:\Program Files (x86)\Java\jdk1.7.0_45
1、开始 编写java文件
package com.jni; public class Util { public native static int add(int x,int y); static { System.loadLibrary( "Util" );//是需要加载的dll文件名称,在vs2010创建项目时名称需要定义为Util } }
2、生成对应的头文件:打开一个dos窗口,进入到存放class文件的目录:
输入命令: javah -classpath . -jni com.jni.Util (class路径表示当前位置,类需要带上包的信息) 这样在classes目录下会生成com_jni_Util.h文件
3、vs2010
中生成dll文件
创建项目; Win32 控制台应用程序--->输入名称Util--->应用程序类型为Dll,附加选项中选中空项目然后点击完成。
从jdk目录下找到文件jni.h(在include文件中)和jni_md.h(在include/win32目录下)文件
在项目Util中创建文件夹include
,然后将文件 jni.h, jni_md.h 和 com_jni_Util.h文件拷贝到该文件夹下
创建C++文件Util.cpp
//Util.c #include "com_jni_Util.h" #include "jni.h" JNIEXPORT jint JNICALL Java_com_jni_Util_add (JNIEnv *env, jclass jc, jint x, jint y) { return x+y; }
若Util.cpp中无法引用到头文件,需要设置.选中项目---->右击
属性--->C/C++ 附加包含目录中编辑添加 .\include
结构如图所示:
然后右击项目,选择生成,会在输出目录(C:\Users\Admin\Documents\Visual Studio 2010\Projects\DLLTest\Debug)下生成Util.dll等文件
4、编写jsp文件 index.jsp
<%@ page import="com.jni.Util" %>
<html> <head></head>
<body> <h3>5+7=<%=Util.add( 5, 7 )%></h3> </body> </html>
5、把Util.dll文件复制到D:\apache-tomcat-6.0.29\bin目录下
6、部署Web项目
7、在ie中输入
http://localhost:8080/TestDll/index.jsp,若界面上能看到5+7=12就表示成功了
参考文章:http://blog.csdn.net/bintime/article/details/2586505