- 写在前面的话
- 引言
- 第 1 章 对象入门
- 第 2 章 一切都是对象
- 第 3 章 控制程序流程
- 第 4 章 初始化和清除
- 第 5 章 隐藏实施过程
- 第 6 章 类再生
- 第 7 章 多形性
- 第 8 章 对象的容纳
- 第 9 章 违例差错控制
- 第 10 章 Java IO 系统
- 第 11 章 运行期类型鉴定
- 第 12 章 传递和返回对象
- 第 十三 章 创建窗口和程序片
- 第 14 章 多线程
- 第 15 章 网络编程
- 第 16 章 设计范式
- 第 17 章 项目
- 附录 A 使用非 JAVA 代码
- 附录 B 对比 C++和 Java
- 附录 C Java 编程规则
- 附录 D 性能
- 附录 E 关于垃圾收集的一些话
- 附录 F 推荐读物
A.5.3 用 Java 设计 COM 服务器
本节将介绍 ActiveX 控件、Automation 服务器或者其他任何符合 COM 规范的服务器的开发过程。下面这个例子实现了一个简单的 Automation 服务器,它能执行整数加法。我们用 setAddend() 方法设置 addend 的值。每次调用 sum() 方法的时候,addend 就会添加到当前 result 里。我们用 getResult() 获得 result 值,并用 clear() 重新设置值。用于实现这一行为的 Java 类是非常简单的:
public class Adder { private int addend; private int result; public void setAddend(int a) { addend = a; } public int getAddend() { return addend; } public int getResult() { return result; } public void sum() { result += addend; } public void clear() { result = 0; addend = 0; } }
为了将这个 Java 类作为一个 COM 对象使用,我们将 Javareg 工具应用于编译好的 Adder.class 文件。这个工具提供了一系列选项;在这种情况下,我们指定 Java 类文件名("Adder"),想为这个服务器在注册表里置入的 ProgID("JavaAdder.Adder.1"),以及想为即将生成的类型库指定的名字("JavaAdder.tlb")。由于尚未给出 CLSID,所以 Javareg 会自动生成一个。若我们再次对同样的服务器调用 Javareg,就会直接使用现成的 CLSID。
javareg /register
/class:Adder /progid:JavaAdder.Adder.1
/typelib:JavaAdder.tlb
Javareg 也会将新服务器注册到 Windows 注册表。此时,我们必须记住将 Adder.class 复制到 Windows\Java\trustlib 目录。考虑到安全方面的原因(特别是涉及程序片调用 COM 服务的问题),只有在 COM 服务器已安装到 trustlib 目录的前提下,这些服务器才会被激活。
现在,我们已在自己的系统中安装了一个新的 Automation 服务器。为进行测试,我们需要一个 Automation 控制器,而 Automation 控制器就是 Visual Basic(VB)。在下面,大家会看到几行 VB 代码。按照 VB 的格式,我设置了一个文本框,用它从用户那里接收要相加的值。并用一个标签显示结果,用两个下推按钮分别调用 sum() 和 clear() 方法。最开始,我们声明了一个名为 Adder 的对象变量。在 Form_Load 子例程中(在窗体首次显示时载入),会调用 Adder 自动服务器的一个新实例,并对窗体的文本字段进行初始化。一旦用户按下“Sum”或者“Clear”按钮,就会调用服务器中对应的方法。
Dim Adder As Object Private Sub Form_Load() Set Adder = CreateObject("JavaAdder.Adder.1") Addend.Text = Adder.getAddend Result.Caption = Adder.getResult End Sub Private Sub SumBtn_Click() Adder.setAddend (Addend.Text) Adder.Sum Result.Caption = Adder.getResult End Sub Private Sub ClearBtn_Click() Adder.Clear Addend.Text = Adder.getAddend Result.Caption = Adder.getResult End Sub
注意,这段代码根本不知道服务器是用 Java 实现的。
运行这个程序并调用了 CreateObject() 函数以后,就会在 Windows 注册表里搜索指定的 ProgID。在与 ProgID 有关的信息中,最重要的是 Java 类文件的名字。作为一个响应,会启动 Java 虚拟机,而且在 JVM 内部调用 Java 对象的实例。从那个时候开始,JVM 就会自动接管客户和服务器代码之间的交流。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论