2013-05-15 233 views
0

假設我有一個簡單的代碼,每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); 



} 

}

+0

這肯定是可能的,但你需要做這些活動,你就必須創造條件,聽那些事件 – greedybuddha

回答

-1

你可以叫你的TimerTask的cancel方法:

@Override 
    public void run() { 

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

    } 
+0

我知道聽衆。但我對對象傾聽者很感興趣。喜歡當計數器達到5時觸發某些代碼。 和Android(DialogInterface.OnClickListener)中一樣,是在Dialog被點擊時提供方法和(用戶)自定義代碼的接口。 – rootpanthera

1

這是非常有可能確實如此。 java.util Observer和Observable中有兩個接口。您可以使用這些接口來實現觀察者模式。只需谷歌與「可觀察的例子」,你會發現大量的資源。

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

0

您需要爲您的變量實施Observer pattern

包含你的計數器的類應該保持一個非常類的集合,它想要通知計數器是什麼。然後當計數器達到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); 
    } 
}