0

我需要一个 Web 项目来构建一个提醒,以显示输入日期和时间的消息。我不想使用任何插件或 jar 文件。我想出了代码,但有一个错误timer.schedule(task,date);

我也是java新手,不知道这是否是正确的方法。

代码:

public String reminder(Model model, HttpServletRequest req, HttpServletResponse res) throws ParseException
{

    String myDate = "2012-06-09 17:43:20";

    DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    Date date = (Date)formatter.parse(myDate);

    TimerTask task = YoTimes(model);
    Timer timer = new Timer();
    timer.schedule(task,date);

    return "/view";
}

private TimerTask YoTimes(Model model) 
{
    model.addAttribute("timerMsg", "Yo Timer");
    return null;
}

编辑

堆栈跟踪:

ERROR:java.lang.NullPointerException 
    at java.util.Timer.sched(Unknown Source) 
    at java.util.Timer.schedule(Unknown Source)
4

2 回答 2

2

您的YoTimes方法返回null. 它应该返回 的实例java.util.TimerTask,以便您可以将其传递给Timer#schedule(TimerTask, Date).

编辑后的yoTimes方法(请注意,作为最佳实践/约定,Java 方法应以小写字符开头):

private TimerTask yoTimes(Model model) {
    model.addAttribute("timerMsg", "Yo Timer");
    return new MyTimerTask();
}

新创建的MyTimerTask类:

public class MyTimerTask extends TimerTask {
    public void run() {
        // Whatever the task should be
    }
}
于 2012-06-09T13:12:05.700 回答
2
private TimerTask YoTimes(Model model) 
{
    model.addAttribute("timerMsg", "Yo Timer");
    return null; // ************
}

请看看你在这里返回什么!

那么这将导致 NPE 也就不足为奇了。也许您想返回一个实际的 TimerTask 对象。;-)

因此,改为创建并返回您的 TimerTask:

private TimerTask YoTimes(final Model model) 
{
    model.addAttribute("timerMsg", "Yo Timer");
    return new TimerTask() {
       public void run() {
          // whatever code you want called by the timer
       }
    };
}
于 2012-06-09T13:11:12.453 回答