私が書いた小さなアプリケーションにランダムに現れる 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();
}
}
});