在C或C 中调用JAVA方法.doc
文本预览下载声明
在C或C++中调用JAVA方法
JAVA跨平台的特性使JAVA越来越受开发人员的欢迎,但也往往会听到不少的抱怨:用JAVA开发的图形用户窗口界面每次在启动的时候都会跳出一个控制台窗口,这个控制台窗口让本来非常棒的程序失色不少。怎么能够让通过JAVA开发的GUI程序不弹出JAVA的控制台窗口呢?其实现在很多流行的开发环境例如JBuilder、Eclipse都是使用纯JAVA开发的集成环境,这些集成环境启动的时候并不会打开一个命令窗口,因为它使用了JNI(Java Native Interface)的技术。通过这种技术开发人员不一定要用命令行来启动JAVA程序,而可以通过编写一个本地GUI程序来直接启动JAVA程序,这样就可避免另外打开一个命令窗口,让我们开发的JAVA程序更加专业。
JNI允许运行在虚拟机的JAVA程序能够与其他语言(例如:C和C++)编写的程序或者库进行相互间的调用。同时JNI提供的一整套的API允许你将JAVA虚拟机直接嵌入到本地的应用程序中。下图是SUN站点上对JNI的基本结构的描述:
本文将介绍如何在C/C++中调用JAVA方法并将其间可能涉及到的问题串在一起介绍整个开发的步骤以及可能遇到的难题和解决方法。本文所采用的工具是Sun Microsystems 公司创建的 Java Development Kit (JDK) 版本 1.3.1以及Microsoft 公司的Visual C++ 6开发环境。
环境搭建为了让本文以下部分的代码能够正常工作,我们必须建立一个完整的开发环境。首先需要下载并安装JDK1.3.1(可以从下载SUN公司的JDK)。我们假设安装路径为C:\JDK。下一步就是设置集成开发环境,通过Visual C++ 6的菜单Tools-Options打开选项对话框如下:将目录C:\JDK\include和C:\JDK\include\win32加入到开发环境的Include Files目录中,同时将C:\JDK\lib目录添加到开发环境的Library Files目录中,这三个目录是JNI定义的一些常量、结构以及方法的头文件和库文件。我们的集成开发环境已经设置完毕,同时为了执行程序我们需要把JAVA虚拟机所用到的动态链接库所在的目录C:\JDK\jre\bin\classic设置到系统的PATH环境变量中。在这里需要提出一点的是:某些开发人员为了方便直接将JRE所用到的DLL文件直接拷贝到系统目录下,这样做是不行的,将导致初始化JAVA虚拟机环境失败(返回值-1),原因是JAVA虚拟机是以相对路径来寻找所用到的库文件和其他一些相关文件的。至此整个JNI的开发环境设置完毕,为了让我们的此次JNI旅程能够顺利进行我们还必须先准备一个JAVA类,在这个类中我们将用到JAVA中几乎所有有代表性的属性以及方法,例如:静态方法与属性、数组、异常抛出与捕捉等等。我们定义的JAVA程序(Demo.java)如下,本文中所有的代码演示都将基于该JAVA程序。
package jni.test;
/**
* 该类是为了演示JNI如何访问各种对象属性等
* @author liudong
*/
public class Demo {
//用于演示如何访问静态的基本类型属性
public static int COUNT = 8;
//演示对象型属性
public String msg;
private int[] counts;
public Demo() {
this(缺省构造函数);
}
/**
* 演示如何访问构造器
*/
public Demo(String msg) {
System.out.println(init: + msg);
this.msg = msg;
this.counts = null;
}
/**
* 该方法演示如何访问一个访问以及中文字符的处理
*/
public String getMessage() {
return msg;
}
/**
* 演示数组对象的访问
*/
public int[] getCounts() {
return counts;
}
/**
* 演示如何构造一个数组对象
*/
public void setCounts(int[] counts) {
this.counts = counts;
}
/**
* 演示异常的捕捉
*/
public void throwExcp() throws IllegalAccessException {
throw new IllegalAccessException(exception oc
显示全部