Olá Pessoal!
Estou com um problema em trabalhar com collections em um trecho do meu aplicativo. Segue o código
for(Despesa d : despesas) {
if(!d.isVitalicia()) {
if (!pagamentoDespesa.isPaga(d)) {
List<ParcelaDespesa> parcelas = d.getParcelasDespesa();
if(parcelas != null) {
Iterator<ParcelaDespesa> it = parcelas.iterator();
while (it.hasNext()) {
//ConcurrentModificationException é lancado na segunda iteração.
ParcelaDespesa p = it.next();
if (!pagamentoDespesa.isPaga(p))
//se eu tirar esse código funciona,
//porém não e o comportamento que eu desejo.
d.addParcelaDespesa(p);
}
}
retornar.add(d);
}
}
else {
//tratar despesas vitalícias
}
}
Segue abaixo o código que tem em Despesa.addParcelaDespesa(ParcelaDespesa);
public void addParcelaDespesa(ParcelaDespesa parcelaDespesa) {
if (parcelaDespesa.getIdParcelaDespesa() == 0) {
if(parcelasDespesa.size()==0)
parcelaDespesa.setIdParcelaDespesa(1);
else
parcelaDespesa.setIdParcelaDespesa(parcelasDespesa.get(parcelasDespesa.size()-1).getIdParcelaDespesa()+1);
}
if(parcelaDespesa.getDespesa() == null)
parcelaDespesa.setDespesa(this);
parcelasDespesa.add(parcelaDespesa);
}
Já tentei implementar em ParcelaDespesa a interface Cloneable e sobreescrever o clone. Não funcionou também
Segue stacktrace lancado;
Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:449)
at java.util.AbstractList$Itr.next(AbstractList.java:420)
at gfi.modelo.Despesa.obterDespesasPagar(Despesa.java:185)
at gfi.forms.PagarDespesasMestre.btnPesquisar2ActionPerformed(PagarDespesasMestre.java:165)
at gfi.forms.PagarDespesasMestre.access$000(PagarDespesasMestre.java:19)
at gfi.forms.PagarDespesasMestre$1.actionPerformed(PagarDespesasMestre.java:56)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
at javax.swing.plaf.basic.BasicButtonListener$Actions.actionPerformed(BasicButtonListener.java:285)
at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1571)
at javax.swing.JComponent.processKeyBinding(JComponent.java:2763)
at javax.swing.JComponent.processKeyBindings(JComponent.java:2798)
at javax.swing.JComponent.processKeyEvent(JComponent.java:2726)
at java.awt.Component.processEvent(Component.java:5265)
at java.awt.Container.processEvent(Container.java:1966)
at java.awt.Component.dispatchEventImpl(Component.java:3955)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1810)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:672)
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:920)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:798)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:636)
at java.awt.Component.dispatchEventImpl(Component.java:3841)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Window.dispatchEventImpl(Window.java:1774)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
Qualquer ajuda será bem-vinda!
Abraços
Ramon