ListSelectionEvent的Java空指针异常

ListSelectionEvent的Java空指针异常,java,swing,awt,jlist,Java,Swing,Awt,Jlist,当我删除数据库中的一行时,这种方法会导致运行时NullPointer异常,我对此非常恼火: private void menuListValueChanged(javax.swing.event.ListSelectionEvent evt) { int index = menuList.getSelectedIndex(); int size = model.getSize(); if (ind

当我删除数据库中的一行时,这种方法会导致运行时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("");
}

谢谢大家!

检索所选菜单的名称仅在选择某项内容时才有意义

答复:

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


希望这有帮助。

您确认了
getMenuName()
是否没有返回
null
值吗?您检查了哪些值是
null
值了吗?它可以是
selectedMenu
menuName
selectedMenu.getMenuName()
,也许可以尝试打印出其中的三个,为您提供一个指向正确方向的指针(而不是空指针)。为了更快地获得更好的帮助,请发布一个(最小的完整且可验证的示例)。它工作正常,谢谢!但我不明白为什么。当没有选择任何内容时,
index
的值为-1。因此,在这种情况下,
selectedMenu
将是
null
,因为
menuList.getSelectedValue()
将返回null。所以你会在下一行得到一个nullpointerexception,非常感谢!但是现在我不明白为什么在我以前的版本中它工作得很好,不同的是现在我使用的是(菜单)对象,以前我使用的是字符串,这是行字符串字段=(String)menuList.getSelectedValue();menuName.setText(字段);我们在if街区外
selectedMenu。getMenuName()给出了nullpointerexception。在您以前的代码中,selectedMenu没有被取消引用,您没有得到任何例外的消息,知道它有帮助。如果你觉得它有帮助,让别人知道你的问题已经解决了,你可能会想接受它。祝你好运
if (index >= 0) { 
    bDeleteMenu.setEnabled(true);
    Menu selectedMenu = (Menu)menuList.getSelectedValue();
    menuName.setText(selectedMenu.getMenuName());
} else {
    bDeleteMenu.setEnabled(false);
}