2013-05-15 54 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); 
    } 
}