You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从JDateChooser获取日期并格式化,解决空指针异常问题?

如何从JDateChooser获取日期并格式化?

JDateChooser原有示例代码

private void jDateChooser1PropertyChange(java.beans.PropertyChangeEvent evt) { 
   
   SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
   String date = sdf.format(jDateChooser1.getDate());
   System.out.println("date:"+ date);
   
}  

报错信息

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException: Cannot invoke 
"java.util.Date.getTime()" because "date" is null
at java.base/java.util.Calendar.setTime(Calendar.java:1801)
at java.base/java.text.SimpleDateFormat.format(SimpleDateFormat.java:975)
at java.base/java.text.SimpleDateFormat.format(SimpleDateFormat.java:968)
at java.base/java.text.DateFormat.format(DateFormat.java:375)
at com.mycompany.pos.add_stock_adjustment1.jDateChooser1PropertyChange(add_stock_adjustment1.java:880)
at com.mycompany.pos.add_stock_adjustment1$7.propertyChange(add_stock_adjustment1.java:466)
at java.desktop/java.beans.PropertyChangeSupport.fire(PropertyChangeSupport.java:341)
at java.desktop/java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:333)
at java.desktop/java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:266)    

错误原因

jDateChooser1.getDate()返回null值时直接传入SimpleDateFormat.format()方法导致空指针。触发null的常见场景包括:组件初始化阶段触发属性变更回调时用户还未选择日期、用户主动清空了日期选择。

修复方案

增加事件类型过滤和日期非空判断即可,修复后代码如下:

private void jDateChooser1PropertyChange(java.beans.PropertyChangeEvent evt) { 
    // 过滤非日期变更的无关事件
    if (!"date".equals(evt.getPropertyName())) {
        return;
    }
    Date selectedDate = jDateChooser1.getDate();
    // 未选择日期时走兜底逻辑,避免空指针
    if (selectedDate == null) {
        // 可根据业务需求调整此处逻辑,比如给默认日期、提示用户选择等
        System.out.println("未选择有效日期");
        return;
    }
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    String dateStr = sdf.format(selectedDate);
    System.out.println("date:" + dateStr);
}

额外优化建议

如果项目使用JDK 8及以上版本,推荐使用DateTimeFormatter替代SimpleDateFormat,前者是线程安全的实现,避免多线程场景下的时间格式化异常问题。


内容的提问来源于stack exchange,提问作者user15221488

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 04:39:04