/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
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

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408926
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste