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

使用JDateChooser遇“Date Must not be Null”错误,求排查解决

问题分析与解决

核心问题

  1. 初始化时getDate()返回null:刚创建JDateChooser时,默认没有选中任何日期,dateChooser.getDate()会返回null,直接传给SimpleDateFormat.format()就会触发"Date Must not be Null"错误。
  2. 日期赋值时机错误:你现在是在组件刚初始化的时候就给Termin设置日期,这时候用户还没来得及选择日期,既拿不到用户输入,也没法随用户选择动态更新。

解决步骤

1. 可选:给日期选择器设置默认日期

如果不想让日期选择器初始为空,可以在创建后直接设置默认日期(比如当前系统日期),避免初始null的情况:

JDateChooser dateChooser = new JDateChooser();
dateChooser.setDate(new Date()); // 设置当前日期为默认值
dateChooser.setBounds(169, 119, 70, 20);
kalender.add(dateChooser);

2. 把日期赋值逻辑移到用户操作事件中

要获取用户选择的日期,必须在用户完成选择后再执行赋值操作,比如放在Next按钮的点击事件里:

btnNext3.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        // 在这里获取用户选择的日期并设置给Termin
        Date selectedDate = dateChooser.getDate();
        if(selectedDate != null){ // 非空判断,避免用户清空日期的情况
            SimpleDateFormat sdl = new SimpleDateFormat("dd-MM-yyyy");
            Termin.setDate(sdl.format(selectedDate));
            System.out.println(Termin);
        }
        LayeredPane.moveToFront(kontakt);
        kalender.removeAll();
    }
});

3. 可选:实时监听日期变化

如果想在用户选择日期的瞬间就更新Termin的date属性,可以给JDateChooser添加属性监听器:

dateChooser.addPropertyChangeListener("date", new PropertyChangeListener() {
    public void propertyChange(PropertyChangeEvent evt) {
        Date selectedDate = (Date) evt.getNewValue();
        if(selectedDate != null){
            SimpleDateFormat sdl = new SimpleDateFormat("dd-MM-yyyy");
            Termin.setDate(sdl.format(selectedDate));
            System.out.println("日期已更新:" + Termin);
        }
    }
});

注意事项

  • 永远记得对dateChooser.getDate()的返回值做非空判断,即使设置了默认日期,用户也可能手动清空选择,导致返回null。
  • 不要在组件初始化阶段就尝试获取用户输入,所有依赖用户操作的数据,都要放在对应的事件回调中处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 05:12:46