程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 用Java設計COM服務器

用Java設計COM服務器

編輯:關於JAVA

本節將介紹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就會自動接管客戶和服務器代碼之間的交流。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved