Я столкнулся с очень странным поведением Java, и я не знаю, является ли это ошибкой, или . Я что-то упускаю.Исключение Nullpointer в LinkedList при использовании для каждого цикла
Код просто проходит через список stateStack (LinkedList) и уничтожает все состояния.
public void clearStates()
{
LogFactory.getLog(StateController.class.getName())
.info("Clearing states. #ofstates="+stateStack.size());
for (State state : stateStack) // Line 132 (see exception)
{
state.destroy();
}
// ...
}
следующее исключение было trowed:
INFO controllers.StateController : Clearing states. #ofstates=1
java.lang.NullPointerException\
at java.util.LinkedList$ListItr.next(LinkedList.java:891)
at *.controllers.StateController.clearStates(StateController.java:132)
// ... //
Этот код обычно работает без проблем и был в производстве в течение более года.
Возможно ли, что это ошибка Java?
/* Update */
уничтожить() вызов не изменяет stateStack. Если бы я догадался, что Java будет throw ConcurrentModificationException.
stateStack был заселен одним состоянием, которое отменяет уничтожение, но только местных модификаций. Супер-реализация, чем печать дополнительного журнала («Destroying state ...»), которого не было в файле журнала, поэтому я думаю, что исключение было отправлено в в начале итерации.
public void destroy()
{
destroyed = true;
LogFactory.getLog(State.class.getName()).info("Destorying state : "+getClass().getName());
propertyChangeSupport.firePropertyChange(PROP_DESTROYED, null, this);
}
Где находится строка ': 132'? Может быть, 'state' в вашем списке« null »? – Manuel
Как и где вы получаете stateStack? – arjacsoh
Какова реализация 'state.destroy()'. Что оно делает? Кроме того, как заполняется «stateStack»? – mthmulders