可执行集成示例:外部设置和更新
用于演示可执行集成的 Java 源代码,该概念是将几个不同的可执行文件集成以创建单个应用程序
引言
本文将演示可执行集成,这是一个将多个独立的应用程序(通常用不同的编程语言编写)集成在一起以创建单个应用程序的概念。
这是一个简单易懂的概念,对初学者和专业人士都很有吸引力,因为它即使在小型项目上也很容易实现,并且可以极大地加快和简化大型项目的开发。
可执行集成具有以下优点:
- 增加代码重用性,因为二进制软件组件可以被不同编程语言的项目使用,并且二进制向后兼容性通常比编译器兼容性更长久(Win7 可以运行 DOS 和 Win9x 的二进制文件,但没有现代编译器可以生成它们)。
- 提高稳定性,因为每个组件的独立性和隔离性增加(没有共享内存或系统资源,组件的进程运行时间更短)。
- 简化测试,因为有标准化的粘合机制,单元测试可以用其他语言编写。
- 高代码内聚性,因为耦合度通常为 0。
- 出于上述原因,可以缩短开发时间。
- 通过减少开发工作量,以及增加现有组件的选择范围和降低平均成本,从而降低成本。
在此示例中,我们将使用几个免费供商业使用的原生实用程序。
- Microsoft Windows 提供的 ping 实用程序。
ConfigEditor
作为设置对话框。PADUpdater
用于检查新版本和自动更新。InfoBrowser
作为帮助系统。
我们将把它们集成到一个我们用 Java 编写的单一应用程序中。
创建我们的主应用程序
主应用程序在此示例中是一个基于 GUI 的网络 ping。它应包含以下功能的代码:
- 创建具有用户操作菜单和用于显示 ping 结果的文本框的主窗口 GUI。
- 处理程序功能,例如从 GUI 接收用户操作并调用相应的任务,然后将结果返回给 GUI。
- 执行外部工具(例如,当用户选择“设置..”菜单项时启动
ConfigEditor
)并获取其输出(例如,ping.exe 工具的输出)。 - 从 *.properties 文件读取程序设置。
为此,我们创建了 4 个类:mainFrame
、MainFunctionality
、ProcessKit
和 PropertiesReader
。
GUI(mainFrame 类)
用户界面代码由我们的开发环境(在本例中为 NetBeans)根据视觉编辑的设计自动生成。用户操作函数调用 MainFunctionality
类来执行实际的程序功能。
程序功能(MainFunctionality 类)
此类包含每个 GUI 操作的一个函数,并根据需要调用 ProcessKit
和 PropertiesReader
。
大多数函数只是调用一个外部进程,例如“设置...”操作。
public boolean SettingsScreen(){
try {
//open the "config editor free" program
ProcessKit.ExecApp(AppPath + "\\ConfigEditor\\ConfigEditorFREE.exe", null);
//read settings from the properties file
settingsfile.Reload();
UpdateColor();
return true;
} catch (Exception ex) {
Logger.getLogger(mainFrame.class.getName()).log(Level.SEVERE, null, ex);
}
return false;
}
启动外部工具(ProcessKit 类)
为此,我们创建了一个名为 ProcessKit
的类,它具有多个进程启动和控制函数。它最重要的函数是 ExecApp()
,该函数基于 Java 内置的执行函数 Runtime.exec()
。
当用户单击“设置”菜单时,它用于运行配置编辑器工具。
读取设置文件(PropertiesReader 类)
此类读取 ConfigEditor 目录中的 settings.properties
文件,并用于从中检索值(例如目标网站等)。
结论
我们可以看到,我们的示例中只有很少的开发人员代码,并且代码本身比通常的更简单,因为代码行之间的差异很小,并且调用外部软件子部分的方法统一。
我只花了 2 个小时就完成了(不包括之前在创建 ProcessKit
和 PropertiesReader
类上投入的精力)。
我让一名初级 Java 开发人员重新创建这个示例应用程序,她花了 6 个小时完成(该代码的 WMFP 指标为 11 小时,因此她比平均开发人员快 45%)。
此示例代码可以用作功能齐全的应用程序骨架,我们可以看到这项任务可以在很短的时间内完成,并且使用了熟悉且免费的组件。
历史
- 这是本文的第一个版本。