2012-06-09 28 views
0

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

有一个错误我也是新来的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) 
+3

什么错误?你能发布堆栈跟踪吗?作为旁注,你的'YoTimes'方法返回'null'。那是故意的吗?难道是错误是一个'NullPointerException'? –

+2

为什么要投射'DateFormat#parse(...)'方法返回的Date对象? –

+0

错误:显示java.lang.NullPointerException \t在java.util.Timer.sched(来源不明) \t在java.util.Timer.schedule(来源不明) – maxi

回答

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 
     } 
    }; 
} 
+0

我刚开始学习java。那么,我应该返回什么?你能编辑我的代码吗?这将是伟大的..谢谢 – maxi

+1

@maxi:你应该返回一个实际的TimerTask对象。请查看[TimerTask API](http://docs.oracle.com/javase/7/docs/api/java/util/TimerTask.html),看看这将需要什么。但最重要的是,由于TimerTask实现了Runnable接口,因此您的TimerTask对象绝对需要是一个运行方法覆盖。 –

+0

这是什么模型类? –

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 
    } 
} 
+0

你能为我编辑代码吗?我试过但没有得到它! – maxi

+0

@maxi查看[TimerTask API](http://docs.oracle.com/javase/7/docs/api/java/util/TimerTask.html)并在[示例](http:// enos.itcollege.ee/~jpoial/docs/tutorial/essential/threads/timer.html)(谷歌上的第一个结果,其中有gazillions)。基本上,创建一个'MyTimerTask'类来扩展'TimerTask'并且有一个'run()'方法来实际执行你想要执行的任务,并且使'YoTimes'方法返回'new MyTimerTask()'。 –

+0

问题得到解决。我想要的是打印 - model.addAttribute(“timerMsg”,“Yo Timer”);在jsp中。我将它包含在run()中,但它不起作用。我确实设定了时间。 – maxi