2009-01-12 66 views
7

從我聽說Java沒有做事情的角度來看,我有點困惑。Java是否具有類似於C#的事件的本機支持?

但我知道它會執行GUI事件。

我錯過了什麼嗎? java有一個事件處理機制嗎?

我知道我可以實現發佈者訂閱者模式,但我正在尋找Java內部的本機支持。

我似乎記得有關Java的一些事情在Java 5或Java 6中添加事件,但我不記得我聽到這些的地方,我可能會補充它。

基本上我正在將一個設備包裝在一個java類中,該設備拋出事件,我正在尋找最合理的方式來公開這個。我主要來自.Net背景,我正在尋找類似於.Net(C#)中的事件的東西。

任何幫助,將不勝感激。

回答

14

正如您已經指出的那樣,您可以使用publisher-subscriber/Observer模式完成同樣的事情。它只需要更多的工作。

不,Java沒有事件的本機支持,就像C#與委託一樣。

-1

您需要線程。 java中的GUI有事件,因爲有一個用於UI事件分派的專用線程。還有一些叫做「Observer」和「Observable」的東西(這是GUI東西中的事件監聽器的味道中性版本),但它只是設計模式...

1

從我記得的Java(haven'沒有在6個月以上的工作),我不認爲有事件.NET .NET。你最好的選擇可能是利用發佈者/訂閱者模式。這很容易實現,相當可靠。

0

Swing或AWT是Java UI工具包,它們都處理事件 - 請查看official Swing event tutorial的示例。您將需要在Swing中編寫您的UI,當然可以爲這些事件註冊監聽器。

+0

我不是一個UI的工作很遺憾。 – 2009-01-12 16:57:47

0

我不是懂行的關於C#,但Java組件不在UI組件可以使用活動一定通知有關狀態變化監聽器:

http://java.sun.com/developer/onlineTraining/Beans/beans02/

這一直是Java組件的一部分,因爲它符合規範第一次出來。注意教程中的日期:它是年份2000.

源和偵聽器必須在同一個JVM中運行。您必須使用代理與另一個JVM中運行的某個進行通信,但可以完成。

我在Google上搜索了C#事件教程,發現this。 Java的註冊監聽器和觸發屬性改變了事件讓我想起了當我瀏覽C#教程時看到的東西。我錯過了重要的事情嗎? (我承認我沒有深入閱讀 - 現在沒時間了。)

0

在Java中沒有本地支持 - 您將不得不實施Observer Pattern(又名抄寫/發佈)。它非常簡單 - 不超過十幾行代碼。

4

其他人在這裏提出的Subscribe/Publish機制可以讓你實現同步事件。對於異步事件循環(火和忘記)你可能想看看「演員」。 Actor<A>由類型A的消息(事件)的處理程序以及執行處理程序的線程策略組成。這可讓你併發,異步事件處理類似如下:

public class EventExample { 
    public static void main(String[] args) { 
    while ((char c = System.in.read()) >= 0) { 
     eventHandler.act(c); 
    } 
    } 

    public static Actor<Character> eventHandler = 
    Actor.actor(Strategy.simpleThreadStrategy(), new Effect<Character>() { 
     public void e(Character c) { 
     // Do something with c here. 
     } 
    }); 
} 

Get the actors library here. See the Javadoc here.

0

你可能也想看看開源EventBus庫,其中,反之爲標準出版商/訂閱者模式使用中介類(事件總線)以減少發佈者/訂閱者模式(訂閱者必須知道所有發佈者向他們註冊)所需的緊密耦合,這並不總是可能的,並且通常是麻煩的。

我已經在GUI應用程序中使用它,但它可以處理任何類型的事件。

相關問題