Avatar billede chr.kj Nybegynder
17. december 2007 - 12:38 Der er 8 kommentarer og
1 løsning

Hvorfor virker min ret-funktion ikke??

Jeg har et problem med at jeg får denne fejl når jeg forsøger at rette en vare i min ArrayListe:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at lagersystem.VareAdmin.jButtonRetActionPerformed(VareAdmin.java:225)

Min metode til at kunne rette varen har jeg lavet i min Lager klasse og koden ser sådan ud:

    public KasseInterface findVare( String varenummer ) {
        for( KasseInterface elem : varer ) {
            if (elem.getVarenummer() == varenummer )
                return elem;
            }
            return null;
        }

I min GUI har jeg tilføjet denne kode til min knap:

    private void jButtonRetActionPerformed(java.awt.event.ActionEvent evt) {                                         
// TODO add your handling code here:
        OpretVare vare = (OpretVare) lageret.findVare( jTextFieldVarenummer.getText() );       
       
        vare.setVarenavn( jTextFieldVarenavn.getText() );
        vare.setVarebeskrivelse( jTextAreaVareBeskrivelse.getText() );               
        vare.setLagerAntal( Integer.parseInt( jTextFieldLagerAntal.getText() ));
        vare.setSalgspris( Float.parseFloat( jTextFieldSalgspris.getText() ));   
        vare.setLagerPlacering( (String) jComboBoxLagerPlacering.getSelectedItem() );
       
        jListOversigt.setListData( lageret.getVarer().toArray() );       
       
       
    } 

Hvorfor fejler min kode når jeg forsøger at rette nogle af felterne i min vare?

Jeg kan simpelthen ikke se det og håber derfor at nogle kan give mig et svar på det.

På forhånd tak.
Avatar billede di8leva Nybegynder
17. december 2007 - 13:20 #1
OpretVare vare = (OpretVare) lageret.findVare( jTextFieldVarenummer.getText() );  gir null...
vare = null, fordi den kan ikke finde varen fra dit varenummer.

så når du fyrer af:
vare.setVarenavn( jTextFieldVarenavn.getText() );

bliver det NullPointerException
Avatar billede chr.kj Nybegynder
17. december 2007 - 13:24 #2
Kan du uddybe??

Er rimelig ny til java, så hvis du kan forklare hvad jeg skal gøre ville der være perfekt.

Jeg forstår det som at jeg skal setText() i varenummer... Er det korrekt??
Avatar billede di8leva Nybegynder
17. december 2007 - 13:33 #3
Du kender godt at i java arbejder du med objekter, og at hvis du fyrer af "objekt.metodekald()" uden at ha selve objektet så får du en NullPointerException?

Og din metode findVare(String varenummer) kan ikke finde den vare du pröver på att finde (ser det ud til).

Pröv at lave sådan her, så skal du nok kunne se hvad fejlen er:

    public KasseInterface findVare( String varenummer ) {
        System.out.println("finder vare for '" + varenummer + "'");
        for( KasseInterface elem : varer ) {
            if (elem.getVarenummer() == varenummer )
                System.out.println("fandt vare '" + elem + "'");
                return elem;
            }
            System.out.println("fandt ikke nogen vare!!!");
            return null;
        }
Avatar billede chr.kj Nybegynder
17. december 2007 - 14:11 #4
Det virker nu, så smid et svar.. :o)

Jeg må indrømme at jeg ikke rigtig kan se en forskel på den kode jeg har skrevet og på den du har... Hvad gjorde du for at få det til at virke??

Tak for hurtig hjælp
Avatar billede di8leva Nybegynder
17. december 2007 - 14:44 #5
Jeg har ikke gjort noget, kun udskrevet hvad der sker.

Det er ikke sådan at du har angivet fejl varenummer tidligere?  Hvad du SKAL göre er nok at rette til dette: (så vil du aldrig få NullPointerException på denne plads, evt kan du tilföje en fejl-besked hvis vare ER null)

Og du kan beholde pointen selv, men måske lidt karma? :)

    private void jButtonRetActionPerformed(java.awt.event.ActionEvent evt) {                                       
// TODO add your handling code here:
        OpretVare vare = (OpretVare) lageret.findVare( jTextFieldVarenummer.getText() );     
      if(vare != null) {
          vare.setVarenavn( jTextFieldVarenavn.getText() );
          vare.setVarebeskrivelse( jTextAreaVareBeskrivelse.getText() );             
          vare.setLagerAntal( Integer.parseInt( jTextFieldLagerAntal.getText() ));
          vare.setSalgspris( Float.parseFloat( jTextFieldSalgspris.getText() )); 
          vare.setLagerPlacering( (String) jComboBoxLagerPlacering.getSelectedItem() );
          jListOversigt.setListData( lageret.getVarer().toArray() );     
      }
    }
Avatar billede chr.kj Nybegynder
17. december 2007 - 14:56 #6
Hmm.. Det var sgu da underligt???

Jeg takker endnu engang for infoen og hjælpen - Sikker på du ikke vil have point?

Har givet dig noget karma :o)
Avatar billede di8leva Nybegynder
17. december 2007 - 15:37 #7
Ja, du kan svare selv og beholde pointsen :)
Avatar billede chr.kj Nybegynder
17. december 2007 - 17:15 #8
Ok.. Takker for hjælpen :o)
Avatar billede chr.kj Nybegynder
18. december 2007 - 17:01 #9
Hmm.. Nu er jeg tilbage hvor jeg startede..

Samme kode osv, men den retter kun det første element i listen.. Ikke det element jeg har markeret og jeg kan ikke forstå hvorfor??

Smider igen 60 point til den der kan hjælpe.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester