JAVA应用程序里调用固有方法.从编程角度看,JNI相当于制作了一个框架,为JAVA
程序与本地机的其他语言编写的程序搭起一座桥梁.使JAVA程序能够调用其他语言编写的功能块.同时也能够使其他语言编写的程序能用JAVA语言中的实体.关系如图5.
C/C++ProgramFunctionJNILibraries
JavaProgramClassesExceptionsJVM
Web浏览器
HTTPjdbc
数据库
图5
应用逻辑SOCKETapplication
客户端
服务器端
图4
比较两种方案,各有利弊.APPLET可以随网页一起下载,但需要解决权限扩充的问题.APPLICATION没有权限的限制,但需要单独装入客户机.选择哪种方案可根据具体情况而定.此外,目前
常用的浏览器的JAVA虚拟机不能完全支持JAVA语言的全部特性.安装JAVAplug-in
软件,用SUN公司的JAVA虚拟机代替浏览器上缺省的
JAVA是以调用动态连接库(DLL)的形式调用C/C++程序.假设在工程图学智能识别系统中有一个名为dllNative.dll的文件,里面定义了一个compare()函数来用于比较两个AutoCAD文件的内部元素.现在在test包中有一个名为cNative的类要调用compare()方法,代码如下:packagetestl;publicclasscNative{publicnativevoidcompare();//声明本地方法static{System.loadLibrary("dllNative");//装载动态连接库文件
}publiccNative(){}publicstaticvoidmain(String[]args){(newcNative()).compare();//调用C++本地方法}利用javac.exe或其他编译工具将JAVA源文件编译成类文件,再利用javah.exe将JAVA类文件生成JNI风格的头文件,生成的头文件的代码如下:#include
#ifndef_Include_test_cNative#define_Include_test_cNative#ifdef_cplusplusextern"C"{#endifJNIEXPORTvoidJNICALLJava_test_cNative_compare(JNIEnv*,jobject);#ifdef_cplusplus}#endif#endif通过在头中得到的本地方法原形,编写本地方法的部分代码如下:#include"test_cNative.h"JNIEXPORTvoidJNICALLJava_test_cNative_compare(JNIEnv*env,jobjectobj){//添加操作码}这样可