tôi đi qua hành vi Java rất kỳ quặc, và tôi không biết nếu nó là một lỗi, hoặc tôi thiếu cái gì đó.Nullpointer ngoại lệ trong LinkedList trong khi sử dụng for-each loop
Mã đơn giản đi qua danh sách stateStack (LinkedList) và hủy tất cả các trạng thái.
public void clearStates()
{
LogFactory.getLog(StateController.class.getName())
.info("Clearing states. #ofstates="+stateStack.size());
for (State state : stateStack) // Line 132 (see exception)
{
state.destroy();
}
// ...
}
Trường hợp ngoại lệ sau đây được 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)
// ... //
Mã này thường làm việc mà không có một vấn đề và đã được sản xuất trong hơn một năm.
Có thể đây là lỗi Java không?
/* Cập nhật */
tiêu diệt() gọi không thay đổi stateStack. Nếu tôi đoán Java sẽ ném ConcurrentModificationException.
stateStack được điền với 1 trạng thái, ghi đè phá hủy, nhưng chỉ sửa đổi cục bộ. Việc triển khai siêu hơn bản ghi nhật ký bổ sung ("Trạng thái phá hủy ..."), không có trong tệp nhật ký, vì vậy tôi đoán ngoại lệ được ném tại số bắt đầu lặp lại.
public void destroy()
{
destroyed = true;
LogFactory.getLog(State.class.getName()).info("Destorying state : "+getClass().getName());
propertyChangeSupport.firePropertyChange(PROP_DESTROYED, null, this);
}
Dòng ở đâu ': 132'? Có thể 'state' trong danh sách của bạn là' null'? – Manuel
Làm thế nào và ở đâu để bạn có được stateStack? – arjacsoh
Việc thực thi 'state.destroy()' là gì. Nó làm gì? Ngoài ra, 'stateStack' được điền như thế nào? – mthmulders