데이터베이스에서 정보를 수집하는 정상적인 데이터베이스 호출이 있습니다. 이러한 정보를 사용하여 내 개체 (CallQueue
)를 만든 다음 이러한 개체를 목록에 추가하면 목록이 반환됩니다.ConcurrentModificationExecption
갑자기 내가 dublicates를 만들었 기 때문에 갑자기 원래 코드가 의도 한대로 작동하지 않는다는 것을 발견했습니다. 그래서 이제는 어떤 dublicates도 생성되고 있음을 무효화하려고합니다! 그러나 문제가 있습니다!
내 목록을 반복해서 살펴보고 개체가 이미 만들어 졌는지 여부를 확인할 수 없습니다.
while (query.next()) {
if (!queues.isEmpty()) {
/*This gives the Execption->*/
for (CallQueue callQueue : queues) {
if (callQueue.getType().equals(query.getString("KØ"))) {
double decimalTime = query.getDouble("TID");
int hourOfDay = (int)Math.round(24 * decimalTime);
int callAmount = query.getInteger("ANTAL_KALD");
if (hourOfDay > 19) {
hourOfDay = 19;
}
callQueue.addCallsByTime(hourOfDay, callAmount);
} else {
String queueName = query.getString("Kø");
if (!queueName.equalsIgnoreCase("PrivatOverflow")) {
CallQueue cq = new CallQueue(query.getString("KØ"));
double decimalTime = query.getDouble("TID");
int hourOfDay = (int)Math.round(24 * decimalTime);
int callAmount = query.getInteger("ANTAL_KALD");
if (hourOfDay > 19) {
hourOfDay = 19;
}
cq.addCallsByTime(hourOfDay, callAmount);
queues.add(cq);
}
}
}
} else {
String queueName = query.getString("Kø");
if (!queueName.equalsIgnoreCase("PrivatOverflow")) {
CallQueue cq = new CallQueue(query.getString("KØ"));
double decimalTime = query.getDouble("TID");
int hourOfDay = (int)Math.round(24 * decimalTime);
int callAmount = query.getInteger("ANTAL_KALD");
if (hourOfDay > 19) {
hourOfDay = 19;
}
cq.addCallsByTime(hourOfDay, callAmount);
queues.add(cq);
}
}
}
for (CallQueue callQueue : queues) {
System.out.println(callQueue.getType());
}
query.Close();
return queues;
내가이에서 얻는 execption은 다음과 같습니다 :
Caused by: java.util.ConcurrentModificationException
필자 ConcurrentModificationException 에서 execption을 올려 보았습니다
이이 사람이 나에게이 문제를 해결하는 데 도움을 줄 수 있습니다 여기에
내 코드입니다 문제?
전체 스택 추적을 게시하십시오. –
제 조언 : iterating하는 동안 항목을 추가하려는 경우 for-each 구문을 사용하는 대신 인덱스를 통해 반복하십시오. – Eric
아마 당신은이 루프를 만들기 위해 synchronized 블록을 사용할 수 있습니다. – matheuslf