Gå til innhold

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


Anbefalte innlegg

Skrevet

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!

Videoannonse
Annonse
Skrevet

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.

Skrevet (endret)

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
Skrevet

Litt lite kode til å si hva som er galt, men av det jeg kan se utifra koden din som er "feil" men ikke har noe med nullpointeren din er:

 

accNum = index;q

 

Skal vel ikke være en q bak semikolon?

Skrevet

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 ...

Skrevet

Takk for all hjelp. Fant feilen, den var så simpel at jeg følte meg skikkelig dum... Måtte bare trykke enter...

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å
×
×
  • Opprett ny...