В программе Swing, которую я пишу, есть кнопка со слушателем действий. В функции actionPerformed для этого ActionListener есть несколько вызовов функций.
Моя проблема заключается в том, что последний вызов функции в actionPerformed пропускается, но он выполняется, если снова нажать кнопку.
Я проверяю это, проходя через программу с помощью отладчика. Я перейду к первой функции, но после возвращения первой функции отладчик останавливается, говоря: «Приложение работает». Если я сделаю паузу, это будет функция с именем park () в Unsafe.class Если я не ошибаюсь, нужно вызвать park, пока программа ожидает ввода, верно?
Вот соответствующий код:
removeDayB.addActionListener(new ActionListener() { //action listener for button being clicked
@Override
public void actionPerformed(ActionEvent actionEvent) {
// JFrame a = new RemoveDayDialog(listOfDays); TODO: I don't think this line does anything
String itemToRemove = comboBox.getSelectedItem().toString();
if (comboBox.getSelectedItem() == noDaysString) {
// TODO: Need to handle this case
} else {
listOfDays.removeDay(itemToRemove);
// TODO: This next next line is not getting executed
refreshComboBox();
}
}
});
listOfDays.removeDay(itemToRemove);
выполняется, я может вступить в него, и желаемые эффекты имеют место. Проблема в том, что refreshComboBox();
не вызывается. Это просто вспомогательная функция, позволяющая обновлять элементы в комбинированном окне, добавляя элементы из контейнера в другой класс.
Что может быть причиной пропуска этой строки?
РЕДАКТИРОВАТЬ: Комментарий указал на чрезвычайно простую ошибку, которую я совершил. вызов listOfDays.removeDay (itemToRemove) действительно вызывал исключение. Я знакомлюсь с новой IDE и, по-видимому, при отладке не вижу исключения. После того, как я запустил программу за пределами отладчика, было сгенерировано исключение, и ошибка, с которой я столкнулся, стала ясной.
public void removeDay(CharSequence str) {
for (Day day : days) {
if (day.getDateAsString().equals(str)) {
days.remove(day);
}
}
}
Исключение было связано с параллелизмом, я думаю, что удаление элемента из дней (ArrayList) в то время как все еще итерации это нет-нет. Исправлено добавлением перерыва после days.remove(day)