我将如何修复以下代码的NullPointerException?

时间:2011-08-20 19:22:36

标签: java exception null nullpointerexception

我有这个代码,当我运行脚本时,我传入了有效的参数,但我继续获得NPE。 帮助

代码:

private static Date getNearestDate(List<Date> dates, Date currentDate) {
    long minDiff = -1, currentTime = currentDate.getTime();
    Date minDate = null;
    if (!dates.isEmpty() && currentDate != null) {
        for (Date date : dates) {
            long diff = Math.abs(currentTime - date.getTime());
            if ((minDiff == -1) || (diff < minDiff)) {
                minDiff = diff;
                minDate = date;
            }
        }
    }
    return minDate;
}

我从上面代码的第2行得到NullPointerException,并使用以下代码将thisDate作为currentDate变量传递。

Date thisDate = null;
try {
    thisDate = (new SimpleDateFormat("MM/dd/yyyy")).parse(Calendar.getInstance().getTime().toString());
} catch (Exception e) {}

2 个答案:

答案 0 :(得分:3)

由于您已经表明第2行引发了NullPointerException,我们可以推断出您为null参数传递了currentDatecurrentDate.getTime()是第2行中唯一可以导致NullPointerException的部分。

更新

我刚刚编写了以下Test.java代码,以便真正了解您的问题:

import java.util.*;
import java.text.*;

class Test {
    public static void main(String[] args) {
        Date thisDate = null;
        try {
            thisDate = (new SimpleDateFormat("MM/dd/yyyy")).parse(Calendar.getInstance().getTime().toString());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

当我运行它时,我得到:

java.text.ParseException: Unparseable date: "Sat Aug 20 12:42:30 PDT 2011"
    at java.text.DateFormat.parse(DateFormat.java:337)
    at Test.main(Test.java:8)

问题在于,您的SimpleDateFormat.parse()期望月/日/年格式,但Date类的toString()方法会为您提供不同的内容。

好像你真正想要的只是当前日期。为什么要格式化呢?只需将其修剪至完成即可:

Date thisDate = new Date(); // this gives you the current date

答案 1 :(得分:2)

你的界限:

thisDate = (new SimpleDateFormat("MM/dd/yyyy")).parse(Calendar.getInstance().getTime().toString());

确实是

  • 创建一个新的Calender对象(使用当前时间初始化),
  • 从中获取一个Date()对象,
  • 将其转换为使用默认格式的字符串,例如“EEE MMM d HH:mm:ss z yyyy”
  • 并尝试将结果解析为格式为“MM / dd / yyyy”的日期
  • (将无法按设计进行解析,从而产生null

如果您修复了此行中的所有问题,最终结果将是包含当前时间的Date对象。

获得此类Date的更简单方法是:

thisDate = new Date();