基本上,我有一个int值x,它是一个类的实例变量。它最初设置为0。我有另一种方法,“getNum”,增加并返回x。这个getNum()方法由外部程序调用。然而,每天(比如说,在午夜,为了简单起见)我想将x重置为0.如何做到这一点?我现在遇到的问题:不推荐使用Date(int,int,int),但该方法只需要Dates,而不是Calendars; TimerTask事件永远不会发生;每次我在底部运行程序时,它每次只打印“0”,即使数字不应该不断重置。基本上没有任何作用。出了什么问题?
import java.util.*;
class Foo {
private static void scheduleTimer() {
Timer timer = new Timer();
long c = 86400000;
timer.scheduleAtFixedRate(new MyTimerTask(),
new Date(2011, 7, 31), c);
}
public static int getNum() { return x++; }
private static int x = 0;
public static void resetNum() { x = 0; }
}
class MyTimerTask() extends TimerTask {
public void run() {
Foo.resetNum();
}
public class Bar { // in a separate file
public static void main (String[] args) {
System.out.println(Foo.getNum());
}
}
答案 0 :(得分:1)
修复你的两个编译错误,调用Foo.scheduleTimer()某处实际启动计时器,给定时器一个合理的延迟和周期(比如几秒),然后重复调用Foo.getNum()而不是一次。例如:
import java.util.Timer;
import java.util.TimerTask;
public class Foo {
public static void scheduleTimer() {
Timer timer = new Timer();
long c = 3000;
timer.scheduleAtFixedRate(new MyTimerTask(), c, c);
}
public static int getNum() { return x++; }
private static int x = 0;
public static void resetNum() { x = 0; }
}
class MyTimerTask extends TimerTask {
public void run() {
Foo.resetNum();
}
}
class Bar {
public static void main(String[] args) throws Exception {
Foo.scheduleTimer();
while (true) {
System.out.println(Foo.getNum());
Thread.sleep(1000);
}
}
}
答案 1 :(得分:0)
根据scheduleAtFixedRate(TimerTask, Date, long)
的文档:
为重复的固定费率执行安排指定的任务, 从指定时间开始。随后的处决发生在 大约定期的间隔,以指定的时间间隔分开。
因此,调用任务大约需要86400000毫秒。你真的在等那么久才确认它不起作用吗?