|||
【图1 Java类库和JNI的关系】
【Java类库】
使用Java类库的目的,是因为想实现的功能,已经有现成的代码程序。
① 但是使用者对于程序内部计算方法并不是很关心,只是想简单调用。
② 如果已有的功能程序是java语言的,可以将该程序放进自己编写的程序Project中,合为一体。
但是可能计算程序十分复杂,文件比较多,自己的程序只是很小一部分,这样做就显得不合适;
③ 另外有些计算程序的作者,并不想公开自己的代码,只是想提供一个结果。
以上原因,就产生了java类库的要求,将现成的代码程序封装起来,
只提供必要的接口,并且制作后的类库体积较小。
【JNI】
如果现有的功能程序是非java语言的,此时就需要通过JNI,用java语言调用非java语言。
【实际操作】
以NIST的RefProp软件为例,该软件的物性计算部分全部是用Fortran语言编写的。
并且软件提供了C++语言调用Fortran源程序的DLL文件。
也就说说,在C++的程序中,可以通过已有的DLL文件调用Fortran程序。
-----------------------------------------------
还需要实现:
① Java类库的调用。
自己编写的Java程序,通过java类库,计算冷媒物性;
② 制作Java类库。
类库中的类调用根据C++语言制作的DLL文件;
③ 制作C++语言的DLL文件。
实现C++调用Fortran源程序。
【图2 实现流程图】
具体实现步骤:
① 编写java类库文件: *.java
② 生成C++的头文件: *.h
③ 编写C++的主文件: *.cpp ,调用DLL文件1
④ 生成DLL文件2
⑤ 制作java类库,生成JAR文件。
----------------------------------------------------
所有的操作都是在NetBeans下进行。
① 编写java类库文件: *.java
· Projects的性质,选择为【Java Class Library】
· NetBeans建议类文件尽量保存在包【package】中。
· 该类文件不能有主函数main( )
程序简单代码如下:
package NIST;
public class RefPropJ {
static {
System.loadLibrary("RefPropJ");
}
public native void initial();
public native void setR410A();
--- ---此处省略 --- --- ---
}
② 生成C++的头文件: *.h
首先将①中编写做好的.java文件,【build】生成.class文件。
然后,在DOS窗口的命令行格式下将.class文件,生成C++的头文件。
C:--略--buildclasses>javah -o RefPropJ.h NIST.RefPropJ
生成RefPropJ.h头文件。
③ 编写C++的主文件: *.cpp ,调用Fortran的DLL文件
在BetBeans环境下,编写C++语言的动态链接库。
· Projects的性质,选择为【C/C++ Dynamic Library】
在之前,需要对NetBeans进行设置,才能进行C++语言的操作。
具体设置,请网上搜索。
按照自动生成的RefPropJ.h头文件格式,
自己编写对应的RefPropJ.cpp文件。
在cpp文件中,参照NIST提供的例子程序,调用NIST提供的DLL文件。
④ 生成C++的DLL文件
完成之后,还要对该项目的【Property】进行必要设置。
【图3 设置1--C++DLL文件的生成设置】
【图4 设置2--C++DLL文件的输出位置】
【 Clean and Build 】,生成C++的动态链接库。
⑤ 制作java类库,生成JAR文件。
将NIST提供的DLL文件和自己制作的C++ DLL文件,放到①中编写的java类库的根文件夹下。
【图5设置--Java类库(JAR)文件的输出位置】
【 Clean and Build 】,
生成java类库文件JAR文件。
至此得到了java类库文件。
--------------------------------------------------------
⑥ Java类库文件的保存位置
一般,将自己制作的类库文件存放在JDK的安装目录下
如: C:Javalib
⑦ Java类库(JAR)文件的使用
编写自己的java程序。
· 将已有的Java类库文件加入到项目中。
【图6 加入类库】
NetBeans中的项目列表中有一项library。
· 还要将两个DLL文件放到项目的根目录下。
· 还要加上import NIST.RefrPropJ
此时就可以使用java类库了。
【补充】
软件的打包。与生成类库的操作基本一致。
NetBeans会自动将所使用的类库,集中起来放在dist文件夹下的lib文件夹内。
但是dll文件没有自动放进来,需要自己放进去。
此时,双击生成的JAR文件。
效果就像是在NetBeans下运行源程序一样。这就是软件的打包。
注意:
因为该文中的类库,最终是调用了NIST的物性计算程序,所以将打包后得到的JAR文件放到一个没有安装NIST的电脑中,程序还是不能正常运行。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-28 18:53
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社