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);
    }   
}
4

3 回答 3

1

确实很有可能。java.util Observer 和 Observable 中有两个接口。您可以使用这些接口来实现观察者模式。只需使用“可观察示例”进行谷歌搜索,您就会发现大量资源。

您需要做的就是将这个类实现为 Observable 并创建另一个类作为 Observer。当你的计数器达到 5 时,你需要做的就是调用 notifyObservers() 方法,它会为所有注册的观察者触发一个事件。

于 2013-05-15T15:47:31.067 回答
0

你需要为你的变量实现一个观察者模式

包含您的计数器的类应该维护一个非常类的集合,该类希望被告知计数器是什么。然后当计数器达到 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);
    }
}
于 2013-05-15T15:49:50.557 回答
-1

您可以在 TimerTask 上调用 cancel 方法:

  @Override
    public void run() {

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

    }
于 2013-05-15T15:41:42.260 回答