请查看以下代码
public class Test {
public Test()
{
Timer timer = new Timer();
timer.schedule(new TimerTask(){
public void run()
{
System.out.println("Updated");
}
}, System.currentTimeMillis(),1000);
}
public static void main(String[]args)
{
new Test();
}
}
在这里,你可以看到它没有打印任何东西!换句话说,时间没有安排!这是为什么?我想安排任务在每一秒发生。请帮忙!
答案 0 :(得分:6)
您告诉Timer
在执行TimerTask
之前等待(大约)1363531420毫秒。这可以用到约42年。您应该使用Timer.schedule(yourTask, 0, 1000)
。
答案 1 :(得分:2)
尝试执行此代码:
import java.util.Timer;
import java.util.TimerTask;
public class Test {
public Test()
{
Timer timer = new Timer();
timer.schedule(new TimerTask(){
public void run()
{
System.out.println("Updated");
}
}, 0,1000);
}
public static void main(String[]args)
{
new Test();
}
}
答案 2 :(得分:2)
看一下javadoc,有两种方法:
schedule(TimerTask task, Date firstTime, long period)
schedule(TimerTask task, long delay, long period)
您正在传递(TimerTask, long, long)
,因此正在调用第二个 - 即安排任务在System.currentTimeMillis()
毫秒内第一次运行,之后每秒运行一次。因此,您的任务将首次在Thu Jun 01 06:45:28 BST 2056
运行,以便找到答案:
public static void main(String[] args) {
System.out.println(new Date(2*System.currentTimeMillis()));
}
您需要使用零调用方法:
Timer timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
System.out.println("Updated");
}
}, 0, 1000);
这意味着安排任务首次以零毫秒运行,之后每秒运行一次。
答案 3 :(得分:0)
您已将延迟设置为以毫秒为单位的当前时间(这将是一段很长的时间:))。你可能想要这个:
public class Test {
public Test()
{
Timer timer = new Timer();
timer.schedule(new TimerTask(){
public void run()
{
System.out.println("Updated");
}
}, new Date(System.currentTimeMillis()),1000); //<--- Notice a date is being constructed
}
public static void main(String[]args)
{
new Test();
}
}
将firstTime设置为当前日期。