0

私が書いた小さなアプリケーションにランダムに現れる NullPointerException があります。基本的には番号のリストを表示し、そのうちの 1 つを選択すると、ウィンドウの別の部分に詳細が表示されます。

ボタンをクリックして新しいデータ セットを追加すると、新しいウィンドウが開き、いくつかのテキスト フィールドと、それをデータベースに送信し、リストを更新して正味のデータ セットを含め、そのデータ セットを選択するためのボタンが表示されます。

この位置で、非常にランダムに 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();
        }
    }
});
4

1 に答える 1

2

入れてみたらどうですか

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

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

何も選択されていない場合は、何もしたくありません。

于 2013-07-17T07:21:47.767 に答える