我有一个表格,这是我editButton
操作方法:
public void editAction() {
if (table.getSelectedRow() > -1) {
String oldFName = table.getValueAt(table.getSelectedRow(), 1).toString();
String oldLName = table.getValueAt(table.getSelectedRow(), 2).toString();
String oldGender = table.getValueAt(table.getSelectedRow(), 3).toString();
System.out.println(oldFName); // prints correctly
System.out.println(oldLName); // prints correctly
System.out.println(oldGender); // prints correctly
AddUserDialog userDialog = new AddUserDialog(this, oldFName, oldLName, oldGender);
} else JOptionPane.showMessageDialog(null, "Select A Row");
}
我的添加用户对话框类:
public AddUserDialog(JFrame owner, String oldFname, String oldLname, String oldGender) {
super(owner, "Edit User Information", true);
fNameTf.setText(oldFname); // First name text field
lNameTf.setText(oldLname); // Last name text field
if (oldGender.equals("Male")) maleRb.setSelected(true); //Male radio Button
else femaleRb.setSelected(true); //Female radio Button
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setLocation(400, 100);
setVisible(true);
pack();
}
...
}
现在,当我选择一行并单击编辑按钮时,旧的名字和旧姓氏以及旧的性别在我的控制台上正确打印,但是我的IDE说例外在这里:
fNameTf.setText(oldFname); // why is Null here?!
更新第二种方式:
public void editAction() {
if (table.getSelectedRow() > -1) {
String oldFName = table.getValueAt(table.getSelectedRow(), 1).toString();
String oldLName = table.getValueAt(table.getSelectedRow(), 2).toString();
String oldGender = table.getValueAt(table.getSelectedRow(), 3).toString();
System.out.println(oldFName); // prints correctly
System.out.println(oldLName); // prints correctly
System.out.println(oldGender); // prints correctly
AddUserDialog userDialog = null;
userDialog.setfName(oldFName); // Why is null here?!
userDialog.setlName(oldLName);
userDialog.setGender(oldGender);
userDialog = new AddUserDialog(this, userDialog.getfName(), userDialog.getlName(), userDialog.getGender());
} else JOptionPane.showMessageDialog(null, "Select A Row");
}
现在NullPointerException在这里:
userDialog.setfName(oldFName);
如何解决这个问题?
fNameTf
null
AddUserDialog
构造函数中。您没有初始化fNameTf
编辑:
AddUserDialog userDialog = new AddUserDialog(this, userDialog.getfName(), userDialog.getlName(), userDialog.getGender());
userDialog.setfName(oldFName);
此行可以抛出 NPE 的唯一方法是它fNameTf
为空,因为它是该行上唯一的"取消引用":
fNameTf.setText(oldFname);
如果这在setfName
调用中得到 NPE,则可能意味着更新的代码实际上并未运行 - 根据我的经验,这是造成这种混乱的最常见原因。 尝试执行清理,然后构建。 还要确保更新的代码是正在执行的代码(可能放在打印语句或类似的东西中来证明这一点)。
AddUserDialog userDialog = null;
userDialog = new AddUserDialog(this, userDialog.getfName(), userDialog.getlName(), userDialog.getGender());
userDialog.setfName(oldFName); // Why is null here?!