Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations Chris Miller on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Help with Java (data listing)

Status
Not open for further replies.

subok

MIS
Feb 21, 2005
37
BE
Hi
Need some help with my java program. I'm trying to write a java code related to bank transactions (e.g. payment) . My problem is that when a new transaction is entered the account is not updated after making for example payment. It seems problem with indexing (cannot be located or ..).

Any help is appreciated

Here is part code (account update part) :

Code:
   public void update(BankRekening rekening){
        this.rekening = rekening;
        System.out.println(this.rekening);
        List<BankRekening> rekeningList = assignRekeningList();
        
        for (BankRekening rObj : rekeningList){
            if (rObj.getRekeningNr().equals(this.rekening.getRekeningNr())){
                int idx = assignRekeningList().indexOf(new BankRekening(rObj.getHouder(),rObj.getRekeningNr(),rObj.getSaldo()));
                //rekeningList.set(getIndex(this.rekening), rekening);
                rekeningList.remove(rObj);
                rekeningList.add(this.rekening);
           }
        }
    }

getting the following error:

Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException
at java.util.LinkedList$ListItr.checkForComodification(LinkedList.java:953)
at java.util.LinkedList$ListItr.next(LinkedList.java:886)
at reservaties.dao.BankRekeningDAO.update(BankRekeningDAO.java:41)
at reservaties.services.BankRekeningService.overschrijven(BankRekeningService.java:35)
at reservaties.services.BankRekeningService.overschrijven(BankRekeningService.java:52)
at reservaties.presentation.Reserveren.addReservatie(Reserveren.java:197)
at reservaties.presentation.KlantAccess.jButton2ActionPerformed(KlantAccess.java:149)
at reservaties.presentation.KlantAccess.access$100(KlantAccess.java:26)
at reservaties.presentation.KlantAccess$2.actionPerformed(KlantAccess.java:68)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:708)
at java.awt.EventQueue$4.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
 
In the Java Tutorial
I found this hint:

Use Iterator instead of the for-each construct when you need to:
Remove the current element. The for-each construct hides the iterator, so you cannot call remove. Therefore, the for-each construct is not usable for filtering.
 
Thanks mikrom for your help , I was able to solve it using Iterator.

But now I am having error again after returning to the calling program. I am trying to assign the return value(List) of the called program but it is giving me this error.


Error:
Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException
at java.util.LinkedList$ListItr.checkForComodification(LinkedList.java:953)
at java.util.LinkedList$ListItr.next(LinkedList.java:886)
at reservaties.dao.BankRekeningDAO.update(BankRekeningDAO.java:52)
at reservaties.services.BankRekeningService.overschrijven(BankRekeningService.java:62)

Calling Program:
Java:
public BankRekening overschrijven(float bedrag,String naarRekeningNr) {
        this.naarRekeningNr = naarRekeningNr;
        this.bedrag = bedrag;
        
        List<BankRekening> rekeningList = assignRekeningList();
        
        for (BankRekening rObj : rekeningList) {
            if (rObj.getRekeningNr().equals(this.naarRekeningNr)) {
                this.houder = rObj.getHouder();
                naarsaldo = rObj.getSaldo()-this.bedrag;
            }
        }
        BankRekening naarRekening = new BankRekening(this.houder,this.naarRekeningNr,naarsaldo);

        return naarRekening; 
    }
    
    public List<BankRekening> overschrijven(float bedrag, String vanRekeningNr, String naarRekeningNr) {

        this.bedrag = bedrag;
        this.vanRekeningNr = vanRekeningNr;
        this.naarRekeningNr = naarRekeningNr;
        
        List<BankRekening> rekeningList = assignRekeningList();
        for (BankRekening rObj : rekeningList) {
            if (rObj.getRekeningNr().equals(this.vanRekeningNr)) {
                this.houder = rObj.getHouder();
                vansaldo = rObj.getSaldo()-this.bedrag;
             }
        }
        
        BankRekening naarRekening = overschrijven(bedrag, naarRekeningNr);
        
        BankRekeningDAO rekeningdao1 = new BankRekeningDAO();
        rList1 = rekeningdao1.update(naarRekening,rekeningList);
        
        for (BankRekening rObj : rList1) {
            System.out.println("ServiceNaar "+rObj.getRekeningNr()+"  "+rObj.getSaldo());
        }
        
        BankRekeningDAO rekeningdao2 = new BankRekeningDAO();
        rList2 = rekeningdao2.update(new BankRekening(this.houder,this.vanRekeningNr,vansaldo), rList1);
       
        for (BankRekening zObj : rList2){
            System.out.println("ServiceVan "+zObj.getHouder()+"  "+ zObj.getSaldo());
        }
        return rList2;
    }
    
}

Called Program:
Java:
public List<BankRekening> update(BankRekening rekening, List<BankRekening> rekeningList){
        this.rekening = rekening;
        this.rekeningList = rekeningList;
        List<BankRekening> rList = rekeningList;
   
        String houder = this.rekening.getHouder();
        String rekeningNr = this.rekening.getRekeningNr();
        float saldo = this.rekening.getSaldo();
        
        Iterator<BankRekening> it = this.rekeningList.iterator();
        while (it.hasNext()) {
            BankRekening itRekening = it.next();
            String ithouder = itRekening.getHouder();
            String itrekeningNr = itRekening.getRekeningNr();
            float itsaldo = itRekening.getSaldo();
            
            if (itrekeningNr.equals(rekeningNr)) {
                it.remove();
                
                rList.add(new BankRekening(houder,rekeningNr,saldo));
                for (BankRekening zObj : this.rekeningList){
                    System.out.println(zObj.getHouder()+"  "+ zObj.getSaldo());
                }
            }
        }
        return rList;
   }
 
It's the same problem again, you can't modify a list while iterating it.

Cheers,
Dian
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top