natknąłem bardzo dziwne zachowanie Java, a ja nie wiem, czy to jest błąd, albo ja czegoś brakuje.NullPointer wyjątek w LinkedList podczas korzystania z-każdej pętli
Kod po prostu przechodzi przez listę stateStack (LinkedList) i niszczy wszystkie stany.
public void clearStates()
{
LogFactory.getLog(StateController.class.getName())
.info("Clearing states. #ofstates="+stateStack.size());
for (State state : stateStack) // Line 132 (see exception)
{
state.destroy();
}
// ...
}
Poniższy wyjątek 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)
// ... //
Ten kod zazwyczaj działa bez problemu i był w produkcji od ponad roku.
Czy to możliwe, że jest to błąd Java?
/* Aktualizacja */
zniszczyć() wywołanie nie zmienia stateStack. Gdyby sądziłem, że Java będzie rzucić ConcurrentModificationException.
StateStack został zapełniony stanem 1, który zastępuje zniszczenie, ale tylko wykonuje lokalne modyfikacje w postaci . Super implementacja niż wypisuje dodatkowy dziennik ("Zniszczenie stanu ..."), którego nie było w pliku dziennika, więc domyślam się, że wyjątek został zgłoszony na na początku iteracji.
public void destroy()
{
destroyed = true;
LogFactory.getLog(State.class.getName()).info("Destorying state : "+getClass().getName());
propertyChangeSupport.firePropertyChange(PROP_DESTROYED, null, this);
}
Gdzie jest wiersz ': 132'? Może "stan" na twojej liście to 'null'? – Manuel
W jaki sposób i gdzie otrzymasz plik stateStack? – arjacsoh
Co to jest implementacja 'state.destroy()'. Co to robi? W jaki sposób jest zapełniany "stateStack"? – mthmulders