听某些事件(对象监听器)

时间:2013-05-15 15:37:58

标签: java

让我们说我有一个简单的代码,它会增加变量" counter"每1秒,每5秒。我想停止计时器,当"计数器"达到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);
    }   
}

3 个答案:

答案 0 :(得分:1)

确实非常可能。 java.util Observer和Observable中有两个接口。您可以使用这些接口来实现Observer Pattern。只需谷歌与“可观察的例子”,你会发现很多资源。

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

答案 1 :(得分: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);
    }
}

答案 2 :(得分:-1)

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

  @Override
    public void run() {

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

    }
相关问题