|  | 		    
					
        
         
          
         
	
          | |  | nullpointer Fra : Lars Wiberg
 | 
 Dato :  14-12-01 22:55
 | 
 |  | følg lige dette stykke kode.. jeg laver et object af klassen Employee:
 
 Employee  e = new Employee();
 
 denne klasse indeholder en:
 
 private int dataphone
 
 som bliver sat med:
 
 void setDataPhone(int i)
 {
 dataphone = i;
 }
 det er vidst standard procedure..
 
 i min GUI har jeg et tekst felt;
 
 private javax.swing.JTextField phoneField;
 
 her skriver jeg et telefon nr. ind og trykker ok. så skulle jeg jo gerne
 kunne gøre dette:
 
 e.setDataPhone(Integer.getInteger(phoneField.getText()).intValue());
 
 men jeg får en nullpointer når jeg kalder den. altså returnerer
 Integer.getInteger(phoneField.getText()).intValue() null hvorfor?
 
 
 
 
 |  |  | 
  Mikkel Bundgaard (15-12-2001) 
 
	
          | |  | Kommentar Fra : Mikkel Bundgaard
 | 
 Dato :  15-12-01 00:00
 | 
 |  | 
 
            "Lars Wiberg" <lars_wiberg@#nospam#mail.dk> wrote in message
 news:3c1a75c2$0$25392$edfadb0f@dspool01.news.tele.dk...
 <SNIP nogle stumper kode>
 Hej Lars
 Kan du ikke poste hele din kode, da det ikke er til at se ud fra de
 stumper du har givet. Hvis der er meget kode, kan du enten sende
 det til dk.binear eller lægge det op på nettet.
 --
 Mikkel Bundgaard
 IT University of Copenhagen
http://officehelp.gone.dk Codito, Ergo Sum
            
             |  |  | 
  Bertel Lund Hansen (15-12-2001) 
 
	
          | |  | Kommentar Fra : Bertel Lund Hansen
 | 
 Dato :  15-12-01 05:40
 | 
 |  | 
 
            Lars Wiberg skrev:
 >    Employee  e = new Employee();
 >    void setDataPhone(int i)
 >i min GUI har jeg et tekst felt;
 >    private javax.swing.JTextField phoneField;
 >   e.setDataPhone(Integer.getInteger(phoneField.getText()).intValue());
 Prøv Integer.parseInt(phoneField.getText()) til at pille tallet
 ud af strengen. Altså
    e.setDataPhone( Integer.parseInt(phoneField.getText()) );
 Hvis du får den slags fejl en anden gang, så split tildelingen op
 i dens elementer og lav en System.out.println for hvert. Så kan
 man spore sig ind på hvor fejlen ligger.
 -- 
 Bertel
http://lundhansen.dk/bertel/    FIDUSO: http://fiduso.dk/ |  |  | 
  Lars Dam (15-12-2001) 
 
	
          | |  | Kommentar Fra : Lars Dam
 | 
 Dato :  15-12-01 09:50
 | 
 |  | On Fri, 14 Dec 2001 22:54:46 +0100, "Lars Wiberg"
 <lars_wiberg@#nospam#mail.dk> wrote:
 
 >her skriver jeg et telefon nr. ind og trykker ok. så skulle jeg jo gerne
 >kunne gøre dette:
 >
 >   e.setDataPhone(Integer.getInteger(phoneField.getText()).intValue());
 >
 
 Først: Er du sikker på at du ved hvad du gør? Altså du bruger
 getInteger()? Prøve at læse dokumentationen for den. Jeg er overbevist
 om at du bliver overrasket. Jeg tror at det er Integer.parseInt() du
 vil bruge istedet.
 
 
 Derudover laver du en klassisk fejl ved at sætte masser af statements
 sammen, og unlader at checke for fejl. Jeg ville omskrive ovenstående
 til:
 
 
 String s = phoneField.getText();
 if( s!=null ){
 try{
 int i = Integer.parseInt(s);
 e.setDataPhone(i);
 }catch(NumberFormatException nfe){
 // handle bad number error here...
 }
 }else{
 // handle no string available here...
 }
 
 Det kan godt være at ovenstående kode er væsentligt større, men:
 
 1) Det giver en bedre læsbarhed
 2) Hvis du får en exception, er der kun eet statement i den linie der
 fejler, og dermed ved du præcis hvor fejlen er. I din udgave er der
 mindst tre mulige fejlkilder i den exception du får. Her er der kun
 een fejlkilde for en exception.
 3) Alle fejlmuligheder bliver håndteret.
 
 Forestiller man sig at man laver et system med askillige klasser, og
 producerer kode med sammensatte statements, er det et mareridt at
 debugge, når der  kommer fejl. Laver man koden som eksemplet, bliver
 debugning gjort mange gange nemmere, idet de tre 'regler' er
 overholdt.
 
 Filosofien med de tre regler er at man i princippet aldrig får brug
 for at nærlæse koden grundigt igen, men blot kan overskue fejlen, når
 den kommer, fordi koden er væsentlig nemmere at læse.
 
 vh. ld
 
 
 |  |  | 
 |  |