使用ListSelectionListener进行奇怪的随机NPE

时间:2013-07-17 05:18:17

标签: java swing nullpointerexception jlist listselectionlistener

我在我编写的lil应用程序中随机出现NullPointerException。 基本上它应显示一个数字列表,当选择其中一个时,一些细节应显示在窗口的另一部分。

当单击按钮添加新数据集时,将打开一个新窗口,其中包含一些文本字段和一个按钮,用于将其激活到数据库并更新列表以包含网络数据集,以及选择该数据集。

在这个位置,我随机获得一个NPE(见下面的日志)。有趣的是 - 无论是否有错误,一切都可以正常工作。只有窗口不关闭。 当我在调试模式下运行时,它永远不会发生。

要查看日志: http://pastebin.com/FQzp6Wqp

这是SelectionListener:

menu.itemList.addListSelectionListener(new ListSelectionListener() {
    @Override
    public void valueChanged(ListSelectionEvent e) {
        String index = menu.itemList.getSelectedValue().toString(); //mentioned Line 63
        TDMInvDB db = new TDMInvDB();
        try {
            details.descr.setText(db.getDescr(index));
            details.specs.setText(db.getSpecs(index));
            details.historyList.setListData(db.getHistory(index));
            if(Integer.parseInt(index) < 0) {
                details.add.setEnabled(false);
                details.edit.setEnabled(false);
            } else {
                details.add.setEnabled(true);
                details.edit.setEnabled(true);
            }
        } catch (ClassNotFoundException e1) {
            e1.printStackTrace();
        }
    }
});

这是要触发数据库的Button的ActionListener:

add.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent ae) {
        TDMInvDB db = new TDMInvDB();
        try {
            db.addItem(inv.getText(), descr.getText(), specs.getText());
            m.itemList.setSelectedIndex(-1);
            m.itemList.setListData(db.getItemList());    //mentioned Line 108
            m.itemList.setSelectedValue(inv.getText(), true);
            ai.dispose();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
});

1 个答案:

答案 0 :(得分:2)

你如何插入

if (menu.itemList.getSelectedValue() == null) 
    return; 

之前

String index = menu.itemList.getSelectedValue().toString();

如果没有选择任何内容,那么您不想做任何事情。