У меня есть ObservableList, ListView для его хранения и событие для обновления выбранных элементов на метку.
ObservableList<String> items = FXCollections.observableArrayList(
"China", "Japan", "Korea", "India");
ListView<String> lvCountries = new ListView<>();
lvCountries.setItems(items);
lvCountries.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
lvCountries.getSelectionModel().selectedIndexProperty().addListener(observable -> {
ObservableList<Integer> indices = lvCountries.getSelectionModel().getSelectedIndices();
if (indices.size() != 0) {
StringBuilder stringBuilder = new StringBuilder("Selected items are");
indices.forEach(index -> stringBuilder.append(" " + items.get(index)));
lblSelected.setText(stringBuilder.toString());
}
});
Все выглядит хорошо, но когда я нажимаю случайно на высокой скорости, иногда выдаетArrayIndexOutOfBoundsException, поскольку index содержит значение -1 .Опять же, это происходит только иногда , когда я быстро выбираю случайно элементы между объектами в режиме MULTIPLE в ListView.
Я не уверен, было ли это как-то связано с ObservableList или как foreachпетля работает или индексы.Программа не аварийно завершает работу или что-то еще, но я хотел бы понять, почему и как это происходит, и решение для этого.
Я использую обновление Java 8 181 (сборка 1.8.0_181-b13), IntelliJ IDEACE, MacOS 10.14
Заранее спасибо и извините за плохой английский.