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
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 に答える
2

メソッドYoTimesはを返しますnulljava.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 に答える