7

コンボボックスからすべてのアイテムを削除する必要があります

int itemCount = combo.getItemCount();

for(int i = 0; i < itemCount; i++){
  combo.removeItemAt(0);
}

このコードは、最後のアイテムを除くすべてのアイテムを削除します。を与えますNullPointerException。それを修正する方法は?

4

9 に答える 9

37

問題のコードは通常は機能します。ただし、スレッドの問題のようです。別のスレッドがアイテムをいじっている可能性があります。

removeAllItems();ただし、次の方法を使用する方がよいと思います。

combo.removeAllItems();
于 2012-09-03T14:01:31.323 に答える
3

JComboBox.removeAllItems()はどうですか?

于 2012-09-03T14:03:16.170 に答える
2

2 行目:

combo.removeItemAt(0);

0代わりにすべきだと思いますi

次のように逆の順序で実行します。

for(int i=combo.getItemCount()-1;i>=0;i--){
    combo.removeItemAt(i);
}

しかし、私の場合は正常にcombo.removeAllItems()動作します

于 2015-03-22T08:51:22.123 に答える
1

別のスレッドに関連しているという仮定は、常に正しいとは限りません。スレッド自体が問題を引き起こしている可能性があります。

この例外は、コンボ アイテムが削除されたときにイベントがトリガーされ、このイベント処理メソッドでまだコンボボックス アイテムを参照しているために発生することがあります。

たとえば、コード内のどこか (actionPeformed() 以外) で、combo.removeItemAt(0) または removeAllItems() を使用してコンボ ボックスの最後の項目を削除すると、イベント actionPerformed が発生/実行されます。しかし、多くの場合、actionPerformed() メソッドには、ユーザー アクション (ユーザーがコンボボックスのどこかをクリックした) に反応するコードが含まれています。そのため、最後のアイテムが削除されると、コンボボックスにはアイテムがなくなり、actionPerformed() でアイテムまたはインデックスを参照すると、例外が発生します。

これに対する解決策は、コードを actionPerformed() から、たとえば mouseClicked() など、目的に応じて別のイベント ハンドラに移動することです。

于 2013-01-11T23:59:40.963 に答える
0

removeAllItems() すべてのものを削除しますが、コンボボックスにデータを追加した後、そこには表示されず、 nullPointException が表示されます

于 2013-10-21T06:07:17.310 に答える
0

これを使用して、コンボ ボックスからすべての要素を削除します。

DefaultComboBoxModel model = (DefaultComboBoxModel) ComboBox.getModel();
model.removeAllElements();
于 2014-02-18T13:21:07.023 に答える