如何在java中的指定时间自动执行函数

时间:2013-11-09 11:27:17

标签: java timer

我有一个要求,我需要在用户设置的指定时间执行一个函数。该函数包含从数据库生成pdf文件并将其保存到机器的本地驱动器中的代码。 这里的时间需要由用户设置,并且可以根据他的要求进行更改。

我从未使用过计时器类..

我有一个代码片段,我从谷歌获得但我没有得到如何在此代码中设置功能执行的用户特定时间细节..

以下是代码段..

class ReportGenerator extends TimerTask {

public void run() {
    System.out.println("Generating report");
    //TODO generate report
}
        }

  class MainApplication {

public static void main(String[] args) {
    Timer timer = new Timer();
    Calendar date = Calendar.getInstance();
    date.set(
            Calendar.DAY_OF_WEEK,
            Calendar.SATURDAY);
    date.set(Calendar.HOUR, 0);
    date.set(Calendar.MINUTE, 0);
    date.set(Calendar.SECOND, 0);
    date.set(Calendar.MILLISECOND, 0);
    // Schedule to run every Sunday in midnight
    timer.schedule(
            new ReportGenerator(),
            date.getTime(),
            1000 * 60 * 60 * 24 * 7);
}

}

我也没有得到这段代码片段的含义......这意味着什么?

 timer.schedule(
            new ReportGenerator(),
            date.getTime(),
            1000 * 60 * 60 * 24 * 7);
}

在上面的代码片段中,给定的函数将在每个星期六执行。

请帮助我。任何想法都受到欢迎...... 提前谢谢..

2 个答案:

答案 0 :(得分:2)

好的,所以我看了一下Timer类,发现你的方法几乎是正确的。您需要稍微编辑代码才能获得所需的功能。

Calendar calendar = Calendar.getInstance();
date.set(Calendar.DAY_OF_WEEK, getUserInputDay()); //
calendar.set(Calendar.HOUR_OF_DAY, getUserInputHour());
calendar.set(Calendar.MINUTE, getUserInputMinute());
calendar.set(Calendar.SECOND, getUserInputSeconds());
Date time = calendar.getTime();

timer = new Timer();
timer.schedule(new ReportGenerator(), time);

这将启动一个计时器,在指定的时间启动“ReportGenerator”。你必须弄清楚如何从用户那里得到输入(应该相当简单!)

答案 1 :(得分:1)

我可以推荐一个名为quartz的好库。其主要目的是在特定时间开始工作。