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