让我们说我有一个简单的代码,它会增加变量" 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);
}
}
答案 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);
}