软件集成技术总结
1 软件集成系统
主要功能是实现各种应用软件在本系统中的集成及调用,由于需要集成软件的开发软件,运行环境各有不同,所以在系统集成时调用的相关技术也不尽相同。本系统软件的集成主要应用了一下三种技术:Java Applet技术,Exe软件的调用方法,Matlab软件的调用方法。
2 相关技术 2.1 Java Applet技术
Applet可以翻译为小应用程序,Java Applet就是用Java语言编写的这样的一些小应用程序,它们可以直接嵌入到网页或者其他特定的容器中,并能够产生特殊的效果。
Applet必须运行于某个特定的“容器”,这个容器可以是浏览器本身,也可以是通过各种插件,或者包括支持Applet的移动设备在内的其他各种程序来运行。与一般的Java应用程序不同,Applet不是通过main方法来运行的。在运行时Applet通常会与用户进行互动,显示动态的画面,并且还会遵循严格的安全检查,阻止潜在的不安全因素(例如根据安全策略,限Applet对客户端文件系统的访问)。
在Java Applet中,可以实现图形绘制,字体和颜色控制,动画和声音的插入,人机交互及网络交流等功能。 Applet还提供了名为抽象窗口工具箱(Abstract Window Toolkit, AWT)的窗口环境开发工具。 AWT利用用户计算机的GUI元素,可以建立标准的图形用户界面,如窗口、按钮、滚动条等等。目前,在网络上有非常多的Applet范例来生动地展现这些功能,读者可以去调阅相应的网页以观看它们的效果。
在Java Applet的生命周期中,共有四种状态(初始态、运行态、停止态和消亡态)和四个方法:init()、start()、stop()和destroy()。 a init() 当创建Java Applet且第一次使用支持Java的浏览器载入时,就会执行init()方法。在Java Applet生命周期中,该方法只执行一次,因此可以利用这一点在init()方法中进行一些只需执行一次的初始化操作,例如对变量的初始化等。 b start() 调用完init()方法后,系统将自动调用start()方法。当用户离开包含Applet的主页后又再返回时,或者当浏览器从图标状态恢复为窗口时,系统都会自动再执行一遍start()方法。
和init()方法不同,start()方法在Applet的生命周期中被多次调用,该方法是Applet的主体。在start()方法中,可以执行一些任务,或者是启动相关的线程来执行任务,如循环播放歌曲等。 c stop() 和star()方法相对应,当用户离开Applet所在页面或者是浏览器变成图标时,系统都会调用stop()方法,因此该方法也是可以被多次调用的。
stop()方法起到这样的作用:当用户在当前时刻并不十分关注Applet时,停止一些耗用资源的工作,这样就可以提高系统的运行速度,而且系统会自动调用该方法,并不需要人为干预。倘若编写的Applet中不涉及动画等多媒体,一般不必重写该方法。51Testing软件测试网 d destroy() 当用户关闭浏览器时,系统就会调用destroy()方法,应该注意stop()方法和destroy()方法的区别。
本系统中的Applet小程序调用流程:运行时,首先从服务器下载应用程序的ZIP压缩文件到本地,然后解压到本地,并在在本地运行,在Applet关闭时,停止exe运行,并删除已下载的ZIP文件和解压后的文件夹 。
2.2 EXE软件的调用方法
使用Runtime.getRuntime().exec()方法可以在java程序里运行外部程序。
该方法有6个可访问版本:
1.exec(String
command)
2.exec(String
command,
String
envp[],
File
dir)
3.exec(String
cmd,
String
envp[])
4.exec(String
cmdarray[])
5.exec(String
cmdarray[],
String
envp[])
6.exec(String
cmdarray[],
String
envp[],
File
dir)
一般的应用程序可以直接使用第一版本,当有环境变量传递的时候使用后面的版本。
其中2和6版本可以传递一个目录,标识当前目录,因为有些程序是使用相对目录的,所以就要使用这个版本.
当要执行批处理的时候,不能直接传递批处理的文件名,而要使用:
cmd.exe
/C
start
批处理文件名
使用dos命令(比如dir)时也要使用掉调用。
如果想与调用的程序进行交互,那么就要使用该方法的返回对象Proce了,通过Proce的getInputStream(),getOutputStream(),getErrorStream()方法可以得到输入输出流,然后通过InputStream可以得到程序对控制台的输出信息,通过OutputStream可以给程序输入指令,这样就达到了程序的交换功能。
使用Runtime类.
try {
Runtime rt = Runtime.getRuntime();
rt.exec(\"C:\\WINDOWS\\NOTEPAD.exe\");
} catch (Throwable t){ System.out.print(t.getMeage());
} 2.3 Matlab软件的调用方法
Matlab软件的调用分为三个步骤:一是在java里面调用matlab,matlab2006b以后的版本中都提供了java 调用matlab的接口matlab build for java;二是将调用matlab程序的java程序转换为exe程序;三是按照2.1所述的方法调用Matlab的exe程序。
关键技术是java调用matlab程序的方法,下面是一个相关的例子: (一) 在MATLAB中编辑operation.m, %定义一个函数operation(a,b),求a与b的加减乘除运算,并返回结果
%函数定义function 输出变量列表[s,m,...] 函数名(输入变量列表)sum,sub,mul,div中
function [sum,sub,mul,div] = operation(a,b); sum = a + b; sub = a - b; mul = a * b; div = a / b; end (二) 生成Java调用文件
Matlab命令中输入deploytool,新建一个matlab builder ja文件,在operationcla中添加operation.m文件,点击bulid the project,生成一个供java调用的文件夹结构如下:
Operation -----|----distrib |
|-----operation.jar |
|-----readme.txt
|
-------src
|
|----operation
|
|----operationcla.java
|
|----operationMCRFactory.java
|----operationclaRemote.java
|
|----claes
|
|----operation
|
|----operation.ctf
|
|---- operationcla$1.cla
|---- operationcla.cla
|---- operationclaRemote.cla
|---- operationMCRFactory.cla |-------build.log |-------operation.ctf | -------operation.jar |-------mccExcludedFiles.log |-------readme.txt (三) Java中建立一个java project工程JavaTestMatlab,导入两个库文件javabuilder.jar(C:\\ProgramFiles\\toolbox\\javabuilder\\jar)和operation.jar(D:\\My Documents\\MATLAB\\operation\\distrib\\ operation.jar),编写java程序JavaTestMatlab.java程序如下: import operation.*; import java.util.Scanner; cla JavaTestMatlab {
public static void main(String[] args)
{
Object result[] = null;
/* object是所有类的父类public Object[] operation(int nargout, Object...rhs) */
operationcla myAdd = null;
/* Stores myadd cla instance */
try
{
int a,b;
myAdd = new operationcla();
System.out.println(\"从键盘输入两个操作数:\");
System.out.print(\"
输入第一个操作数:\");
Scanner scan = new Scanner(System.in);
//从控制台读入输入的整数
a = scan.nextInt();
//从控制台输入第一个操作数
System.out.print(\"
输入第二个操作数: \");
b = scan.nextInt();
//从控制台输入第二个操作数
result = myAdd.operation(4,a,b); //operation(4,a,b)中第一个参数是返回值的个数 ,a是第一个输入参数,b是第二个输入参数
System.out.print(\"The sum of \" + Integer.toString(a) + \" and \" + Integer.toString(b) + \" is: \");
System.out.println(result[0]);
System.out.print(\"The sub of \" + Integer.toString(a) + \" and \" + Integer.toString(b) + \" is: \");
System.out.println(result[1]);
System.out.print(\"The mul of \" + Integer.toString(a) + \" and \" + Integer.toString(b) + \" is: \");
System.out.println(result[2]);
System.out.print(\"The div of \" + Integer.toString(a) + \" and \" + Integer.toString(b) + \" is: \");
System.out.println(result[3]);
}
catch (Exception e)
{
System.out.println(e);
}
} } 测试结果如下:
从键盘输入两个操作数:
输入第一个操作数:55
输入第二个操作数: 22 The sum of 55 and 22 is: 77 The sub of 55 and 22 is: 33 The mul of 55 and 22 is: 1210 The div of 55 and 22 is: 3 (四) 错误调试
1.安装matlab不完整,没有toolbox\\javabuilder下的文件 2.环境变量中clapath中添加两个jar文件的路径
3 已经集成的软件
ORDEM2000 空间碎片评估系统(DAS2.0) 增阻型离轨气动分析及优化软件 索型离轨技术模拟软件TetherSim 卫星寿命计算软件 再入安全评估软件
GEO卫星离轨燃料估算软件