返回介绍

A.5.3 用 Java 设计 COM 服务器

发布于 2024-10-15 23:56:38 字数 2094 浏览 0 评论 0 收藏 0

本节将介绍 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文