私は、劇場で 1 つまたは複数の座席を選択して自分で予約するように設計されたシンプルなインターフェイスを持っています。
ゾーン / 行 / 座席の 3 つの列があります。1 番目を選択して 2 番目に入力し、2 番目を選択して 3 番目に入力します。
初めてそれらを選択するときは問題ありません。
2 列目を変更すると、3 列目が再配置されます (この場合、すべての列の座席数は同じです)。壊れることはありません。
ただし、最初の行を変更すると、すべてが壊れます。
これで、その理由はちょっとはっきりしましたが、これがなぜなのか正確にはわかりません。
これは最初のリスト イベント トリガーです。
List_Zona.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent arg0) {
if (! arg0.getValueIsAdjusting()){
RowListModel.clear(); // second list
SeatListModel.clear(); // third list
List_Rand.clearSelection(); // second list
List_Scaun.clearSelection(); // third list
int[] rows = self.repository.getRowsForZone(
List_Zona.getSelectedValue().toString()
);
int index = 0;
while (rows[index]!=0) {
RowListModel.addElement(String.valueOf(rows[index]));
index++;
}
}
}
});
この次のトリガー (2 番目の列) に干渉しないように、他の列の選択をクリアする必要がありますが、どうやら干渉するか、または私が取得できない何かが発生します:
List_Rand.addListSelectionListener(new ListSelectionListener() {
public void valueChanged(ListSelectionEvent arg0) {
if (! arg0.getValueIsAdjusting()){
SeatListModel.clear();
int[] seats = self.repository.getSeatByZoneAndRow(
List_Zona.getSelectedValue().toString(),
Integer.parseInt(List_Rand.getSelectedValue().toString())//HERE
);
int index = 0;
while (seats[index]!=0) {
SeatListModel.addElement(String.valueOf(seats[index]));
index++;
}
}
}
});
2番目の列をクリアする必要があるため、整数を解析できませんが、そうではありませんか? しかし、そうではないのに...そうですか?
私が言いたいこと: 2 番目の列は明確である必要があります (そうではありません)。そうでない場合、エラーは発生しないはずですが、発生します。
これが意味をなすことを願っています!
誰でも問題を見つけることができますか? もっとコードを提供する必要がありますか?
エラーは 2 番目の列の NullPointerException です。これは、何か怪しいことがそこで発生しているためです (ここでも、整数の解析で)。
私の考えでは、最初の列の項目をクリックしても、2 番目の列valueChanged
はまったくトリガーされません。他の2つをクリアするだけで、それだけです。なぜ私は間違っているのですか?
PS最初のコード スニペットは、プログラムを壊す 2 つ目の原因です。
たぶん、新しい「ゾーン」(ゾーン)を再選択するときにすべてを安全にクリアするにはどうすればよいかという質問も言い換える必要があります-列1?