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

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

码:

private static Date getNearestDate(List 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行抛出了NullPointerException ,因此我们可以推断出您为currentDate参数传递了nullcurrentDate.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 

什么你的线:

 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();