簡體   English   中英

Java 自定義事件處理程序和偵聽器

[英]Java custom event handler and listeners

我目前正在使用 Socket.io 的 Java 實現,可在此處獲得: netty-socketio

我已經啟動並運行服務器,並且它在客戶端和服務器之間很好地接收/發送消息,但是我需要在接收到某些消息時觸發事件,這就是我感到困惑的地方。

這是我的代碼:

server.addEventListener("message", clientData.class, new DataListener<clientData>() {
    @Override
    public void onData(SocketIOClient client, clientData data, AckRequest ackRequest) throws Exception {
                System.out.println("Message from client: " + data.getMessage());

    }
});


public class ClientData{

    String message;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

}

基本上我想要發生的是當從客戶端接收到特定消息時,我需要另一個類中的函數來運行。 在過去的兩個小時里,我一直在閱讀ObservableObserverInterfaces和事件處理程序,但我真的不知道如何設置它。

該庫還提到了這個DataListener ,但我不知道那是什么,因為庫中的文檔很少。

對此的任何意見或建議將不勝感激。

假設您引發事件的類稱為A 需要監聽事件的類稱為B 該事件稱為SomeEvent

首先,創建一個名為SomeEventListener的接口:

public interface SomeEventListener {
    void onSomeEvent ();
}

如果您想在事件發生時傳遞參數(通常是關於事件的一些內容),您可以將其添加到方法中。

然后在A ,添加一個字段:

private SomeEventListener listener;

和一個方法:

public void setSomeEventListener (SomeEventListener listener) {
    this.listener = listener;
}

這樣, B就可以調用setSomeEventListener來設置監聽器。

當事件發生時, A應該調用

if (listener != null) listener.onSomeEvent ();

這就是A的全部內容!

B ,您需要實現接口:

public class B implements SomeEventListener {
    public void onSomeEvent () {
        //do whatever you like when SomeEvent happens.
    }
}

你可以像這樣監聽SomeEvent

someInstanceOfA.setSomeEventListener (this);

並且在這個調用之后,所有由A引發的SomeEvent都可以被B監聽!

使用 Observable 和 Observer 模式,我們可以看到A是一個 Observable 而B是一個觀察者。

這很容易!

暫無
暫無

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

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