Avatar billede tutma Nybegynder
14. december 2002 - 23:21 Der er 29 kommentarer og
1 løsning

gemme ændringer i objekt i vektor

Hej,

Jeg sidder her og nørder en lørdag aften og har endnu engang brug for HJÆLP !

Jeg har et program, hvor jeg laver en medlemsliste(en vektor), som jeg gemmer medlemmerne(instanser af PersonligeOplysninger-klassen)i. Dette fungerer ganske fint, og vektoren kan også gemmes og hentes via disk. Dog sker det, at når jeg ændrer oplysninger for et givent medlem, hvor bl.a status, kategori og klasse vælges via JComboBox, og forsøger at gemme ændringerne, så brokker kompileren sig, jf. nedenstående. Via System.out.println kan jeg se, at ændringerne registreres(div. set-metoder er anvendt i denne forbindelse), og jeg tror også, at ændringerne gemmes! Er det egentligt et problem, at kompileren viser NullPointerException, når systemet tilsyneladende fungerer fint? 

Jeg ved ikke, om det kan skyldes mine JComboBoxe og JList, hvor medlemslisten gøres visuel, for det er henholdsvis metoderne: setSelectedValue og setListData, der umiddelbart er problemer med.

Jeg har en mistanke om, at det ville være hensigstmæssigt at anvende Iterator, når medlemslisten (en vektor som sagt) gemmes og hentes. Er det rigtigt?

Svar udbedes snarest muligt, idet programmet skal være færdigt senest på onsdag!

På forhånd rigtig mange tak  ;-)

Tut


http://imv.au.dk/~ttut/eksperten/Ny%20mappe/Skydning/

Dette er et print af consollen:
....
aendrede oplysn
status er ændret til:Aktiv
kategori er ændret til:Senior
klasse er ændret til:1
....
java.lang.NullPointerException
    at GuiController.valueChanged(GuiController.java:43)
    at javax.swing.JList.fireSelectionValueChanged(JList.java:1318)
    at javax.swing.JList$ListSelectionHandler.valueChanged(JList.java:1332)
    at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:187)
    at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:167)
    at javax.swing.DefaultListSelectionModel.fireValueChanged(DefaultListSelectionModel.java:214)
    at javax.swing.DefaultListSelectionModel.changeSelection(DefaultListSelectionModel.java:402)
    at javax.swing.DefaultListSelectionModel.changeSelection(DefaultListSelectionModel.java:411)
    at javax.swing.DefaultListSelectionModel.removeSelectionInterval(DefaultListSelectionModel.java:481)
    at javax.swing.DefaultListSelectionModel.clearSelection(DefaultListSelectionModel.java:416)
    at javax.swing.JList.clearSelection(JList.java:1577)
    at javax.swing.JList.setModel(JList.java:1217)
    at javax.swing.JList.setListData(JList.java:1248)
    at GuiController.actionPerformed(GuiController.java:298)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1767)
    at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1820)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:419)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:257)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:258)
    at java.awt.Component.processMouseEvent(Component.java:5021)
    at java.awt.Component.processEvent(Component.java:4818)
    at java.awt.Container.processEvent(Container.java:1380)
    at java.awt.Component.dispatchEventImpl(Component.java:3526)
    at java.awt.Container.dispatchEventImpl(Container.java:1437)
    at java.awt.Component.dispatchEvent(Component.java:3367)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3214)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:2929)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:2859)
    at java.awt.Container.dispatchEventImpl(Container.java:1423)
    at java.awt.Window.dispatchEventImpl(Window.java:1566)
    at java.awt.Component.dispatchEvent(Component.java:3367)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:445)
    at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:190)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:144)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:130)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:98)
Avatar billede tutma Nybegynder
14. december 2002 - 23:23 #1
Iøvrigt er java-klasserne lagt på nettet på ovenståend link samt her:
http://imv.au.dk/~ttut/eksperten/Ny%20mappe/Skydning/
Avatar billede arne_v Ekspert
14. december 2002 - 23:29 #2
Ja - jeg vil mene, at det er et problem, at I får en
NullPointerException.

Jeg tror ikke, at det har noget med jeres Vector at gøre - det ligner
et rent GUI problem.
Avatar billede tutma Nybegynder
14. december 2002 - 23:33 #3
Altså, at kompileren(eller hvad det nu er? :0) pludseligt ikke ved, hvad variablerne visuelMedlemliste (JList) og status(JComboBox) er?
Avatar billede arne_v Ekspert
14. december 2002 - 23:33 #4
Det er:
        main.status.setSelectedItem((String)p.getStatus());
eller:
        main.kategori.setSelectedItem((String)p.getKategori());
I får fejlen på ikke ?

Spørgsmål: er p null ??
Avatar billede arne_v Ekspert
14. december 2002 - 23:34 #5
Et gæt kunne være at:

PersonligeOplysninger p =
            (PersonligeOplysninger) main.visuelMedlemliste.getSelectedValue();

returnerede null, fordi I efter at have gemt ikke har
selected noget ??
Avatar billede tutma Nybegynder
14. december 2002 - 23:35 #6
kan man catche en NullPointerException?
Avatar billede arne_v Ekspert
14. december 2002 - 23:36 #7
Ja.

Men det er *IKKE* måden at løse problemet på.

Prøv og:

PersonligeOplysninger p =
            (PersonligeOplysninger) main.visuelMedlemliste.getSelectedValue();
System.out.println(p);

og se om den udskriver null !
Avatar billede tutma Nybegynder
14. december 2002 - 23:39 #8
Så vidt jeg kan se kalder jeg slet ikke metoden
PersonligeOplysninger p =
            (PersonligeOplysninger) main.visuelMedlemliste.getSelectedValue();
der hvor problemet opstår, eller gør jeg?
Avatar billede arne_v Ekspert
14. december 2002 - 23:40 #9
Den sagde:
java.lang.NullPointerException
    at GuiController.valueChanged(GuiController.java:43)
 
Når jeg kigger i GuiController valueChanged line 43 på ovenestående
URL, så er der en sådan linie !
Avatar billede tutma Nybegynder
14. december 2002 - 23:41 #10
Det eneste jeg egentligt ønsker, er at opdatere visuelMedlemliste
Avatar billede arne_v Ekspert
14. december 2002 - 23:44 #11
Du henter det selected og bruger det til at opdatere med.

Hvsi nu der ikke er noget selected, så kunen det godt give
en null pointer exception.
Avatar billede arne_v Ekspert
14. december 2002 - 23:49 #12
Prøv md den println og se om det er det som er problemet.

Hvis det er det så måd et være nemt at fixe.
Avatar billede tutma Nybegynder
14. december 2002 - 23:50 #13
Ja, det kan jeg godt se!! Sorry!

Det undrer mig bare, at det først er, når jeg vil gemme ændringerne for medlemmet, at problemet fremprovokeres.
Avatar billede arne_v Ekspert
14. december 2002 - 23:52 #14
Måske forsvinder selecten fordi du klikke rpå noget andet for at
gemme ??  (gæt: jeg har ikke studeret hele applikationen)
Avatar billede tutma Nybegynder
14. december 2002 - 23:53 #15
Okay, p er IKKE null
Avatar billede arne_v Ekspert
14. december 2002 - 23:55 #16
OK.

Hvad siger:

        System.out.println((String)p.getStatus());
        System.out.println((String)p.getKategori());

?

[jeg forsøger at finde ud af, hvad det er der er null]
Avatar billede arne_v Ekspert
14. december 2002 - 23:57 #17
Og:

        System.out.println(main.status);
        System.out.println(main.kategori);

?
Avatar billede tutma Nybegynder
15. december 2002 - 00:00 #18
Der er actionListener på comboboxene, men jeg skriver ikke decideret if(e.getSource()==status) {
...og kalder den relevante metode
}

istedet skriver jeg bare : po.setStatus((String) main.status.getSelectedItem());
Dvs. uden e.getSource-metoden. Kan det være det, der udløser problemerne?
Avatar billede arne_v Ekspert
15. december 2002 - 00:01 #19
Godt spørgsmål.

Prøv og skriv dem ud og se om der noget der er null !
Avatar billede tutma Nybegynder
15. december 2002 - 00:03 #20
Jeg tror, det er her:

main.visuelMedlemliste.setListData((Vector) main.medlemsliste);
Avatar billede arne_v Ekspert
15. december 2002 - 00:04 #21
Er main.medlemsliste eller main.visuelMedlemliste null ?
Avatar billede tutma Nybegynder
15. december 2002 - 00:12 #22
Har lige prøvet forskelligt af med SOP'er, men det lader ikke til, at noget er null.
Avatar billede arne_v Ekspert
15. december 2002 - 00:17 #23
De sagde null pointer i GuiController valueChanged line 43 !

Der må være en null pointer deromkring.
Avatar billede tutma Nybegynder
15. december 2002 - 00:18 #24
Her er noget kode i gem-funktionen:

po.setKategoriOgKlasse(
                    (String) main.kategori.getSelectedItem(),
                    (String) main.klasse.getSelectedItem());

                po.setStatus((String) main.status.getSelectedItem());
               
                System.out.println("aendrede oplysn");
                System.out.println("status er ændret til:" + po.getStatus());
                System.out.println(
                    "kategori er ændret til:" + po.getKategori());
                System.out.println("klasse er ændret til:" + po.getKlasse());
                System.out.println((String)po.getStatus());
               
        System.out.println((String)po.getKategori());
        System.out.println(po.status);
      //  System.out.println(po.kategori);


                //medlemsliste.indsaetNyPersonligeOplysninger(persOpl);

                //                        medlemsliste.add(persOpl);
                main.theFile.gemMedlemsliste(main.medlemsliste);
                System.out.println(
                    "følgende medlemsliste er gemt" + main.medlemsliste);
                main.visuelMedlemliste.setListData(main.medlemsliste);
                System.out.println(main.visuelMedlemliste);
                System.out.println(main.medlemsliste);
                System.out.println(
                    "følgende medlemsliste er gemt EFTER setListData"
                        + main.medlemsliste);
                main.visuelMedlemliste.repaint();                    + main.medlemsliste);

-----------------

Følgende udskrives i konsollen:


aendrede oplysn
status er ændret til:stoettemedlem
kategori er ændret til:Senior
klasse er ændret til:4
stoettemedlem
Senior
stoettemedlem
gemmer data i fil[Tut Ma, Tut Ma]
følgende medlemsliste er gemt[Tut Ma, Tut Ma]
java.lang.NullPointerException
    at GuiController.valueChanged(GuiController.java:43)
Avatar billede tutma Nybegynder
15. december 2002 - 00:22 #25
Så ja, der er en null mht. visuelMedlemliste og medlemliste. Men hvordan løses det så?
Avatar billede tutma Nybegynder
15. december 2002 - 00:26 #26
Jeg har nu udkommenteret:

main.visuelMedlemliste.setListData(main.medlemsliste);

Og, der er ingen problemer!
Avatar billede tutma Nybegynder
15. december 2002 - 00:31 #27
<<arne v

skriv lige et svar, så jeg kan give dig points for din tålmodighed  ;0)
Avatar billede arne_v Ekspert
15. december 2002 - 13:43 #28
svar
Avatar billede arne_v Ekspert
15. december 2002 - 13:46 #29
Jeg kan ikke gennemskue om den udkommentering er OK. Der har
vel været en grund til at den linie blev satind i første omgang.

Men hvis programmer virker som de skal uden exceptions, så er
alt jo godt.
Avatar billede tutma Nybegynder
15. december 2002 - 23:05 #30
Nej, det er ikke i længden en holdbar løsning, men det var rart, at du gav dig tid til lige at se på det, og så en hel time i går nat! Tak for det, anyway...
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