欢迎来到天天文库
浏览记录
ID:33708685
大小:122.50 KB
页数:14页
时间:2019-02-28
《在c或c++中调用java方法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、在C或C++中调用JAVA方法JAVA跨平台的特性使JAVA越来越受开发人员的欢迎,但也往往会听到不少的抱怨:用JAVA开发的图形用户窗口界面每次在启动的时候都会跳出一个控制台窗口,这个控制台窗口让本来非常棒的程序失色不少。怎么能够让通过JAVA开发的GUI程序不弹出JAVA的控制台窗口呢?其实现在很多流行的开发环境例如JBuilder、Eclipse都是使用纯JAVA开发的集成环境,这些集成环境启动的时候并不会打开一个命令窗口,因为它使用了JNI(JavaNativeInterface)的技术。通过这种技术开发人员
2、不一定要用命令行来启动JAVA程序,而可以通过编写一个本地GUI程序来直接启动JAVA程序,这样就可避免另外打开一个命令窗口,让我们开发的JAVA程序更加专业。JNI允许运行在虚拟机的JAVA程序能够与其他语言(例如:C和C++)编写的程序或者库进行相互间的调用。同时JNI提供的一整套的API允许你将JAVA虚拟机直接嵌入到本地的应用程序中。下图是SUN站点上对JNI的基本结构的描述:本文将介绍如何在C/C++中调用JAVA方法并将其间可能涉及到的问题串在一起介绍整个开发的步骤以及可能遇到的难题和解决方法。本文所采用
3、的工具是SunMicrosystems公司创建的JavaDevelopmentKit(JDK)版本1.3.1以及Microsoft公司的VisualC++6开发环境。一.环境搭建为了让本文以下部分的代码能够正常工作,我们必须建立一个完整的开发环境。首先需要下载并安装JDK1.3.1(可以http://java.sun.com从下载SUN公司的JDK)。我们假设安装路径为C:JDK。下一步就是设置集成开发环境,通过VisualC++6的菜单Tools->Options打开选项对话框如下:将目录C:JDKinclu
4、de和C:JDKincludewin32加入到开发环境的IncludeFiles目录中,同时将C:JDKlib目录添加到开发环境的LibraryFiles目录中,这三个目录是JNI定义的一些常量、结构以及方法的头文件和库文件。我们的集成开发环境已经设置完毕,同时为了执行程序我们需要把JAVA虚拟机所用到的动态链接库所在的目录C:JDKjrebinclassic设置到系统的PATH环境变量中。在这里需要提出一点的是:某些开发人员为了方便直接将JRE所用到的DLL文件直接拷贝到系统目录下,这样做是不行的
5、,将导致初始化JAVA虚拟机环境失败(返回值-1),原因是JAVA虚拟机是以相对路径来寻找所用到的库文件和其他一些相关文件的。至此整个JNI的开发环境设置完毕,为了让我们的此次JNI旅程能够顺利进行我们还必须先准备一个JAVA类,在这个类中我们将用到JAVA中几乎所有有代表性的属性以及方法,例如:静态方法与属性、数组、异常抛出与捕捉等等。我们定义的JAVA程序(Demo.java)如下,本文中所有的代码演示都将基于该JAVA程序。packagejni.test;/***该类是为了演示JNI如何访问各种对象属性等*@a
6、uthorliudong*/publicclassDemo{//用于演示如何访问静态的基本类型属性publicstaticintCOUNT=8;//演示对象型属性publicStringmsg;privateint[]counts;publicDemo(){this("缺省构造函数");}/***演示如何访问构造器*/publicDemo(Stringmsg){System.out.println(":"+msg);this.msg=msg;this.counts=null;}/***该方法演示如何访问一
7、个访问以及中文字符的处理*/publicStringgetMessage(){returnmsg;}/***演示数组对象的访问*/publicint[]getCounts(){returncounts;}/***演示如何构造一个数组对象*/publicvoidsetCounts(int[]counts){this.counts=counts;}/***演示异常的捕捉*/publicvoidthrowExcp()throwsIllegalAccessException{thrownewIllegalAccessExce
8、ption("exceptionoccur.");}}一.初始化虚拟机本地代码在调用JAVA方法之前必须先加载JAVA虚拟机,而后所有的JAVA程序都在虚拟机中执行。为了初始化JAVA虚拟机,JNI提供了一系列的接口函数:InvocationAPI。通过这些API我们可以很方便的将虚拟机加载到内存中。创建虚拟机可以用以下的函数:jintJNI_
此文档下载收益归作者所有