使用ListSelectionEvent的Java Null指针异常

时间:2014-04-09 15:21:07

标签: java swing awt jlist

我对这个方法很生气,当我删除数据库中的一行时会导致运行时NullPointer异常:

private void menuListValueChanged(javax.swing.event.ListSelectionEvent evt) {                                      
    int index = menuList.getSelectedIndex();
    int size = model.getSize();
    if (index >= 0) { 
        bDeleteMenu.setEnabled(true);
    } else { 
        bDeleteMenu.setEnabled(false);
        }
    Menu selectedMenu = (Menu)menuList.getSelectedValue();
    menuName.setText(selectedMenu.getMenuName());
}

错误在这一行: menuName.setText(selectedMenu.getMenuName());

仅在我删除项目时发生。 这是错误: 线程中的异常" AWT-EventQueue-0"显示java.lang.NullPointerException。 我想这是因为当我删除Jlist中的项目时,选择不会自动更改为下一个,或类似的东西。

这是我用来删除项目的方法:

private void bDeleteMenuActionPerformed(java.awt.event.ActionEvent evt) {                                            
    Menu selectedMenu = (Menu)menuList.getSelectedValue();
    selectedMenu.getMenuName();
    int index = menuList.getSelectedIndex();
    DBConnection.deleteMenu(selectedMenu);
    int size = model.getSize();
    if (size == 0) { 
        bDeleteMenu.setEnabled(false);
    } else { 
        if (index == model.getSize()) {
            index--;
        }
        menuList.setSelectedIndex(index);
        menuList.ensureIndexIsVisible(index);
    }
    model.removeElement(selectedMenu);
    menuName.setText("");
}

谢谢!

1 个答案:

答案 0 :(得分:2)

只有在选择了某些内容的情况下,才能检索所选菜单的名称。

Replce

if (index >= 0) { 
    bDeleteMenu.setEnabled(true);
} else { 
    bDeleteMenu.setEnabled(false);
}
Menu selectedMenu = (Menu)menuList.getSelectedValue();
menuName.setText(selectedMenu.getMenuName());

if (index >= 0) { 
    bDeleteMenu.setEnabled(true);
    Menu selectedMenu = (Menu)menuList.getSelectedValue();
    menuName.setText(selectedMenu.getMenuName());
} else {
    bDeleteMenu.setEnabled(false);
}

希望这有帮助。