日期:2014-05-20  浏览次数:20942 次

时间格式化 为什么空指针异常
private String jcongtime;
//set get

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

jcongtime=sdf.format(pi.getJiagongtime());

pi是一个对象。jiagongtime是其字段 是Java.util.Date类型

我在jsp页面 是要回显日期的:
之前是这样写的:(没有用自己定义的jcongtime这个字段)
 <input type="text" name="pi.jiagongtime" value="${pi.jiagongtime}"
但是这样做 选择日期后 回显的不是 2012-04-11这种格式 而是 一串英文的格式
所有我想把起转为字符串所有用了SimpleDateFormat 然后赋给我的自己定义的jcongtime这个字段
在页面:<input type="text" name="pi.jiagongtime" value="${jcongtime}"
现问题来了:
  但选择了日期 即pi.getJiagongtime()!=null 一切正常 可以回显
但是当pi.getJiagongtime()==null 时报空指针异常 是jcongtime=sdf.format(pi.getJiagongtime());这行报的错误
我能确定pi对象不是空的(因为没选择日期那么选择了其他字段)所以不是pi.getJiagongtime());这个方法报的 求解释

------解决方案--------------------
虽然pi对象不是空的,但是pi.getJiagongtime()有可能为空的啊。

要是pi.getJiagongtime()==null就好比下面的代码,当然报空指针异常了。

Java code

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        sdf.format(null);

------解决方案--------------------
看看源代码你就很清楚了,format会调用到SimpleDateFormat的方法
Java code

public StringBuffer format(Date date, StringBuffer toAppendTo,
                               FieldPosition pos)
    {
        pos.beginIndex = pos.endIndex = 0;
        return format(date, toAppendTo, pos.getFieldDelegate());
    }