[英]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.