JFormattedTextField没有读取日期?给出'java.lang.NullPointerException'`

JFormattedTextField没有读取日期?给出'java.lang.NullPointerException'`,java,swing,date,Java,Swing,Date,我正在设计一个员工数据管理器,允许用户添加、编辑和查看员工详细信息 在代码中,我有一个JFormattedTextField定义如下 SimpleDateFormat dateDOB = new SimpleDateFormat("dd/MM/yyyy"); JFormattedTextField DOBBX = new JFormattedTextField(dateDOB); 当我想要编辑员工数据时,我将日期加载到JFormattedTextField,如下所示: DOBBX.setT

我正在设计一个员工数据管理器,允许用户添加、编辑和查看员工详细信息

在代码中,我有一个
JFormattedTextField
定义如下

 SimpleDateFormat dateDOB = new SimpleDateFormat("dd/MM/yyyy");
 JFormattedTextField DOBBX = new JFormattedTextField(dateDOB);
当我想要编辑员工数据时,我将日期加载到JFormattedTextField,如下所示:

DOBBX.setText(""+retrievedStaff.getDOB());
编辑后,如果我保存数据,DOB的值为null,我得到一个
java.lang.NullPointerException
。只有当我未编辑DOB的值时,才会发生这种情况。如果我对DOB进行更改或再次输入,则正确保存DOB值

另外,如果我添加了一个新的staff,然后尝试在不关闭程序的情况下编辑staff数据,那么该日期将正确地保存到二进制文件中,并且没有空指针错误

我该如何解决这个问题

(我不知道如何为此提供MCVE,因为我的代码很长,由许多类组成)

在将日期保存为二进制文件之前,我使用以下方法将其转换为字符串:

public String getDOB() {
    SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");
    try{
    String textDate = df.format((DOB));
    return textDate;
    }catch(Exception e){e.printStackTrace();}
    return null;

}
StackTrace中提到错误是由这部分代码产生的:

String textDate = df.format((DOB));

我解决了这个问题。因此,正如我在问题中所说的,如果我单击或更改DOB文本框,日期会正确地保存到二进制文件中。因此,当用户使用
requestFocus()

单击编辑按钮时,我将光标设置为DOB textfield。您需要澄清“编辑后,如果保存数据”,在这种情况下,编辑到底意味着什么?我指的是完全的互动。你只是在输入一个值,你是否也在使用tab键,你是在按enter键,还是只是输入文本并尝试“获取值”?
“我不知道如何为此提供一个MCVE,因为我的代码很长,由许多类组成”
——是时候进行调试,然后进行重构,这样你的代码才是MCVE(这样可以减少圈复杂度)。请注意,变量名应以小写字母开头,以符合Java命名约定。此外,还应使用
setValue(…)
传入日期,而不是
setText(…)设置JFormattedTextField
我正在使用一个带有动作侦听器的保存按钮,我正在使用
getValue
@Gnoupi将其作为日期读取。谁知道,直到他给我们看。我想亲自看看。我们得到的只是一些我们无法测试的小代码片段和难以理解的广泛描述。不幸的是,现在还不清楚发生了什么,b因为我们没有完整的电影。但是,我建议您遵循@hovercraftfullofels的建议,我还要补充一点,您应该准确检查格式化字段中的内容。我猜,鉴于我对这种情况知之甚少,您输入的文本没有提交。当您按下时,会发生提交当您称自己为CommittedIt()时,请输入,ou。在提交更改之前,该字段没有有效值,因此可能为null。此外,我缺少详细信息,因此这是一个猜测