站内搜索: 请输入搜索关键词

当前页面: 开发资料首页Java 专题用Jace整合Java和C++

用Jace整合Java和C++

摘要: Jace是一种免费的开放源代码的工具,它使我们能够轻松地开发JNI(Java本机接口)代码

  摘要

  Jace是一种免费的开放源代码的工具,它使我们能够轻松地开发JNI(Java本机接口)代码。本篇文章详细地分析了JNI API的问题,以及如何使用Jace解决这些问题。

  如果没有更深的了解,我们一定会以为Sun设计JNI的目的是为了不让Java编程人员使用它。毕竟,类型安全形同虚设,缺乏错误检查机制,进行一次简单的Java方法调用需要4次或更多的JNI调用,这都是JNI明显的不足之处。另外,我们还必须管理JNIEnv指针,不能在多个线程中使用JNI调用,必须为每种可能的操作在9个函数调用中进行选择,而且异常信息的获取也非常地困难。这还只是JNI所出现问题的一部分,我们还能发现许多其他问题。

  这些限制中的许多部份都与JNI与C语言的绑定有关,C语言本身对类型安全、异常处理机制的支持也非常不好。尽管目前大多数的编程人员都已经能够使用C++编写代码,但Sun没有放弃C编程人员,这也是JNI目前这种状况的原因。不幸的是,这种很难使用的API给开发人员带来了许多困难。

  Jace是一款免费的开放源代码的工具包,旨在使JNI编程变得更加简单。它支持由Java类文件自动生成C++代理类以及C++与Java的异常、数组、包、对象的整合,管理Java引用的线程绑定和生命周期。更为重要的是,它能够使我们开发更小、更易于理解、在编译时类型安全的模块。

  JNI的类型系统

  Jace最基本的特点是它使用C++代理类来表达Java类型。为了真正地理解代理类的优点,我们首先需要来看看JNI的类型系统。Sun在JNI中使用了24种C类型来表示所有可能的Java类型。JNI包含有9个简单类型:

  ·jboolean

  ·jbyte

  ·jchar

  ·jshort

  ·jint

  ·jlong

  ·jdouble

  ·jfloat

  ·void

  JNI有14种引用类型,如下图所示:

<table width=600 align=center> <tr> <td>
          (图:picture01) </td></tr></table>

  另外,JNI有一个复合型的类型jvalue,它能够表达所有的简单和引用类型。

  Jace类型系统

  图2表示基本的Jace数据类型的类图表。这些类是我们访问Jace运行时间库的简单的接口,它与JNI的数据类型对应非常紧密。

<table width=600 align=center> <tr> <td>
               (图:picture02) </td></tr></table>

  Jace的数据类型系统是直接以24种JNI数据类型为基础的,对于每一种JNI数据类型而言,Jace都有一个相应的C++代理类。9种JNI简单数据类型以及jvalue、jclass、jobject、jstring和jthrowable都直接映射为相应的Jace代理类,JNI的jarray数据类型以及9个派生的数组数据类型都被映射为一种基于模板的JArray数据类型。在下面的部分中,我们将对每种C++代理类进行详细的解释。




↑返回目录
前一篇: J2EE配置指南
后一篇: 通过Struts应用MVC设计模型