0

私はテーブルを持っていて、それが私の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");
}

私の AddUserDialog クラス:

    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?!

更新 2 番目の方法:

    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);

これをどのように解決しますか?

4

2 に答える 2

2

fNameTfコンストラクタnullにあります。AddUserDialogあなたは初期化していませんfNameTf

編集:

AddUserDialog userDialog = new AddUserDialog(this, userDialog.getfName(), userDialog.getlName(), userDialog.getGender());

userDialog.setfName(oldFName);
于 2013-09-14T15:37:23.157 に答える
1

この行が NPE をスローできる唯一の方法は、この行でfNameTf唯一の「逆参照」であるため null です。

fNameTf.setText(oldFname);

これがsetfName呼び出しで NPE を取得した場合、更新されたコードが実際には実行されていないことを意味している可能性があります。これが、私の経験では、このような混乱の最も一般的な原因です。クリーンを実行してからビルドしてみてください。また、更新されたコードが実行されているコードであることを確認してください (おそらく、それを証明するために print ステートメントなどを挿入します)。

    AddUserDialog userDialog = null;
    userDialog = new AddUserDialog(this, userDialog.getfName(), userDialog.getlName(), userDialog.getGender());
    userDialog.setfName(oldFName);  // Why is null here?!
于 2013-09-14T15:37:44.200 に答える