Gå til innhold

[Løst] Problem med Arraylists og søke etter ett objekt


Anbefalte innlegg

Jeg har en skoleoppgave hvor jeg skal lage en bank. Jeg har laget en GUI, hvor brukeren kan lage konto, sette inn/ta ut penger etc. Men når jeg prøver å søke etter en kunde får jeg en feilmelding.

 

for (index = 0; index < customers.size(); index++)
  {
   if (customers.get(index).getName().equals(exsistingAcc))
 {
 found = true;
 accNum = index;q
 index = customers.size();
 }

 

Feilmeldingen:

 

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

at Bank$searchButtonHandler.actionPerformed(Bank.java:258)

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:6504)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)

at java.awt.Component.processEvent(Component.java:6269)

at java.awt.Container.processEvent(Container.java:2229)

at java.awt.Component.dispatchEventImpl(Component.java:4860)

at java.awt.Container.dispatchEventImpl(Container.java:2287)

at java.awt.Component.dispatchEvent(Component.java:4686)

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:2713)

at java.awt.Component.dispatchEvent(Component.java:4686)

at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)

at java.awt.EventQueue.access$000(EventQueue.java:101)

at java.awt.EventQueue$3.run(EventQueue.java:666)

at java.awt.EventQueue$3.run(EventQueue.java:664)

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:680)

at java.awt.EventQueue$4.run(EventQueue.java:678)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

 

 

Takk for all hjelp!

Lenke til kommentar
Videoannonse
Annonse

Ikke helt sikker, men for meg ser det ut til at du får en NPE/NullPointerException i linje 258 når du klikker knappen som skal søke etter kunde.

Hadde tatt en titt på den metoden, prøvd ting som customer != null ol, for å sjekke hva som er null.

Lenke til kommentar

Forøvrig en litt gammeldags måte å iterere ArrayList på, som sikkert henger igjen fra måten man tradisjonelt itererer et vanlig array.

 

Siden ArrayList implementerer Iterable kunne heller gjort dette:

 

for (Customer customer : customers) {
 if (customer.getName().equals(exsistingAcc)) {
found = true;
accNum = index;q
index = customers.size();
 }
}

 

Edit: Ehmm.. ser jo at du gjør noe med denne indexen til objektet etter at du har funnet det, så det er vel bare delvis riktig hva jeg har skrevet her. Når det er sagt så er det vel ikke spesielt lurt å ha accNum (Account Number?) definert som indexen av en array? Den burde da heller være en property i objektet. index = customers.size() bruker du for å bryte for loopen, i mitt eksempel kunne du da heller gjort break;

 

Da ville eksempelet sett mer slik ut:

 

for (Customer customer : customers) {
 if (customer.getName().equals(exsistingAcc)) {
   found = true;
   accNum = customer.getAccNum();
   break;
 }
}

Endret av MrEspen
Lenke til kommentar

trenger du egentlig både

 

index = customers.size();

 

og variabelen found? Det er litt rotete.

 

foreslår at du setter et breakpoint i l 258 (hvor nå det måtte være) og ser hva som er null. Evt. gode gamle System.out.println(xyzzy); på de mistenkte ...

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...