簡體   English   中英

偵聽某些事件(對象偵聽器)

[英]Listen to certain events (object listener)

假設我有一個簡單的代碼,它每 5 秒將變量“counter”增加 1。 當“計數器”達到 5 時,我想停止計時器。我想為此使用對象偵聽器(偵聽某些事件)。 這可能嗎?

public class CallMe{

    static int counter = 0;
    
    public static void main(String[] args) {
        
        // This code increments counter variable by 1, every 5 seconds.

        Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {
            
            @Override
            public void run() {

                counter++;
                System.out.println(counter);
                
            }
        }, 1000, 5000);
    }   
}

這確實很有可能。 java.util Observer 和 Observable 中有兩個接口。 您可以使用這些接口來實現觀察者模式。 只需使用“Observable Examples”谷歌搜索,你就會發現大量資源。

您需要做的就是將此類實現為 Observable 並創建另一個類作為 Observer。 當您的計數器達到 5 時,您需要做的就是調用 notifyObservers() 方法,它將為所有注冊的觀察者觸發一個事件。

您需要為變量實現觀察者模式

包含您的計數器的類應該維護一個非常類的集合,這些類希望被告知計數器是什么。 然后當計數器達到 5 時,您將通知發送給所有偵聽器。

@Override
public void run() {
    counter++;
    System.out.println(counter);
    if(counter == 5) {
        notify();
    }
}

private void notify() {
    for(ChangeListener l : listeners) {
        l.stateChanged(new ChangeEvent(counter));
    }
}

其他一些類:

class Obs implements ChangeListener {
    @Override
    public void stateChanged(ChangeEvent e) {
        System.out.println(e);
    }
}

您可以在 TimerTask 上調用取消方法:

  @Override
    public void run() {

        counter++;
        if(counter == 5) {
          this.cancel();
        }
        System.out.println(counter);

    }

暫無
暫無

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

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