2011-06-29 6 views
0

Je travaille sur un projet en Java. Ici, je suis bloqué par ce problème et je n'arrive pas à comprendre où je me trompe.Exception de pointeur nul

J'ai fait deux classes: Test et Child. Lorsque j'exécute le code, j'obtiens une exception NullPointerException.

package com.test; 
public class Test { 

    child newchild = new child(); 
    public static void main(String[] args) { 
     new Test().method(); 
    } 
    void method() { 
     String[] b; 
     b = newchild.main(); 
     int i = 0; 
     while (i < b.length) { 
      System.out.println(b[i]); 
     } 
    } 
} 

package com.test; 
public class child { 
    public String[] main() { 
     String[] a = null; 
     a[0] = "This"; 
     a[1] = "is"; 
     a[2] = "not"; 
     a[3] = "working"; 
     return a; 
    } 
} 
+3

Dans l'avenir (et même maintenant), vous devez indiquer clairement quelle ligne est de lancer l'exception. Cette information est disponible dans la trace de pile de l'exception. –

+3

...cela fonctionne comme prévu: il crée un 'NullPointerException' dans' child # main() ';-) –

Répondre

13

Voici le problème:

String[] a = null; 
a[0]="This"; 

Vous êtes immédiatement essayer de déréférencer a, qui est nul, afin de mettre un élément en elle. Vous devez initialiser le tableau:

String[] a = new String[4]; 
a[0]="This"; 

Si vous ne savez pas combien d'éléments de votre collection devrait avoir avant de commencer peuplant (et souvent même si vous faites) Je suggère d'utiliser un List de quelque sorte. Par exemple:

List<String> a = new ArrayList<String>(); 
a.add("This"); 
a.add("is"); 
a.add("not"); 
a.add("working"); 
return a; 

Notez que vous avez un autre problème:

int i=0; 
while(i<b.length) 
    System.out.println(b[i]); 

Vous n'êtes jamais changer i, il sera toujours être 0 - si vous entrez dans la boucle while du tout , vous n'en sortirez jamais. Vous voulez quelque chose comme ceci:

for (int i = 0; i < b.length; i++) 
{ 
    System.out.println(b[i]); 
} 

Ou mieux:

for (String value : b) 
{ 
    System.out.println(value); 
} 
+1

Gees Jon! Tu m'as déjà battu? –

4

C'est le problème:

String[] a = null; 
a[0]="This"; 
0

Ils ont mis en évidence le problème de votre probablement la définition d'exception de pointeur NULL donnerait vous une idée quoi et où trouver le problème à l'avenir. De java api doc, il définit ce qui est npe et dans quelle situation il sera jeté. J'espère que cela vous aidera.

Lance lorsqu'une application tente d'utiliser null dans le cas où un objet est requis. Ceux-ci comprennent:

* Calling the instance method of a null object. 
* Accessing or modifying the field of a null object. 
* Taking the length of null as if it were an array. 
* Accessing or modifying the slots of null as if it were an array. 
* Throwing null as if it were a Throwable value. 
0

test de paquet;

public class Test {

child newchild = new child(); 

    public static void main(String[] args) { 

     new Test().method(); 
    } 
    void method() 
    { 
     String[] b; 
     b = newchild.main(); 
     int i=0; 
     while(i<b.length){ 
      System.out.println(b[i]); 
      i++; 
     } 
    } 

} test package

;

enfant public class {

public String[] main() { 

    String[] a = {"This","is","not","Working"}; 
    return a; 

}