簡體   English   中英

Java 是否具有與 C# 類似的對事件的本機支持?

[英]Does Java have native support for events, similar to that of C#?

我對 Java 不做事件的說法感到有些困惑。

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

我錯過了什么嗎? java有事件處理機制嗎?

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

我似乎記得一些關於在 Java 5 或 6 中添加事件的內容,但我不記得我在哪里聽到的,可能是我編造的。

基本上,我將設備包裝在設備拋出事件的 Java 類中,並且我正在尋找最合乎邏輯的方式來公開它。 我主要來自 .Net 背景,我正在尋找類似 .Net (C#) 中的事件的東西

任何幫助,將不勝感激。

正如您已經說過的,您可以使用發布者-訂閱者/觀察者模式執行完全相同的操作。 它只是需要更多的跑腿工作。

不,Java 沒有對事件的本機支持,就像 C# 對委托所做的那樣。

這里別人提出的 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.
      }
    });
}

在此處獲取演員庫。 請參閱此處的 Javadoc。

這是有關該主題的文章,另請參閱適用於 Java 的哪個 Actor 模型庫/框架?

從我對 Java 的記憶來看(超過 6 個月沒有使用它),我認為沒有 .NET 事件。 您最好的選擇可能是使用發布者/訂閱者模式。 它很容易實現並且非常可靠。

Swing 或 AWT 是 Java UI 工具包,它們都處理事件 - 查看官方 Swing 事件教程以獲取示例。 當然,您需要在 Swing 中編寫 UI 才能為這些事件注冊偵聽器。

我不了解 C#,但不是 UI 組件的 Java Beans 當然可以使用事件通知監聽器狀態更改:

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

自從它第一次出現以來,這一直是 Java Beans 規范的一部分。 注意教程上的日期:它是 2000 年的年份。

源和偵聽器必須在同一個 JVM 中運行。 您必須使用代理與在另一個 JVM 中運行的東西進行通信,但這是可以做到的。

我在 Google 上搜索了 C# 事件教程並找到了這個 Java 注冊偵聽器和觸發屬性更改事件使我想起我瀏覽 C# 教程時看到的內容。 我錯過了什么重要的事情嗎? (我承認我沒有深入閱讀 - 現在沒有時間。)

Java 中沒有本機支持 - 您必須實現觀察者模式(又名訂閱/發布)。 它非常簡單 - 不超過十幾行代碼。

您可能還想看看開源EventBus庫,與標准的發布者/訂閱者模式相反,它使用中介類(事件總線)來減少發布者/訂閱者模式中所需的緊密耦合(訂閱者必須了解所有出版商才能向他們注冊,這並不總是可能的,而且通常很麻煩)。

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

實用程序可觀察@自 JDK1.0

你需要線程。 java中的GUI有事件,因為有一個專門的線程來調度UI事件。 還有一些叫做“Observer”和“Observable”的東西(這是來自GUI東西的事件偵聽器的中性版本),但這只是設計模式......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM