2010-09-18 6 views
0

Aujourd'hui est mon premier jour java apprentissage :)Pourquoi ai-je une exception de pointeur nul

Je vais avoir des problèmes en cours d'exécution d'un exemple très simple (pas un grand début).

C'est juste un exemple simple qui demande à un utilisateur d'entrer et de l'imprimer mais je reçois une exception de pointeur nul lorsque j'essaie de lire une ligne depuis la console.

Je ne comprends pas parce que tout semble être instancié.

public static void main(String[] args) { 
     // TODO code application logic here 

     Console console = System.console(); 
     String userinput; 
     userinput= console.readLine("Enter input: "); 
     /* Creates list for planets */ 
     ArrayList outputlist= new ArrayList(); 
     outputlist.add(userinput); // Adds users input to the list 
     outputlist.add("an entry"); // Adds a string to the list 
     System.out.println("\nTwo items: " + outputlist); 
    } 

EDIT 1

Comme un certain nombre de personnes ont signalé l'erreur est levée lorsque je tente de lire une ligne de la console parce que la console est nulle (même si je suis instancier?). Je me sens un peu bête en demandant cela mais comment puis-je rendre la console "non nulle". Ce que je pensais faire en utilisant Console console = System.console().

Mon attente de flux de travail était d'écrire une entrée utilisateur simple en utilisant netbeans. Appuyez sur le bouton de débogage. Voir un écran pop up. Entrez du texte. Voir la sortie.

EDIT 2

O.K

Après un peu de creuser autour d'elle se avère que vous ne pouvez pas utiliser System.Console dans les NetBeans. Je ne comprends pas pourquoi. Je suis juste scanner utilisateur à la place.

Maintenant, je ne suis pas sûr de ce que réponse à accepter o-0

+1

Pouvez-vous publier l'exception ici? – casablanca

+7

'System.console()' peut renvoyer une valeur nulle si vous n'exécutez pas le code dans un terminal. Courez-vous ce code dans un IDE? – McDowell

+0

@McD: C'est la seule cause possible. Vous devriez publier cela comme une réponse :) – BalusC

Répondre

2

Il doit être System.console(). Vous ne faites aucune autre opération sur un objet qui provoquerait une exception de pointeur null. Et comme @McDowell a souligné, System.console() peut retourner une valeur null

2
Console console = System.console(); 
String userinput; 
userinput= console.readLine("Enter input: "); 

au lieu de cela, utilisez le code suivant; Je pense que System.Console est utilisé dans la plate-forme .Net

String userinput; 
InputStreamReader sr =new InputStreamReader(System.in); 
BufferReader br=new BufferReader(sr); 
userinput=br.readLine(); 
+1

Java a System.console() depuis la version 1.6 - vérifiez la documentation actuelle de java.lang.System. – foo

0

Vous ne vérifiez pas l'une des valeurs de résultat. Ainsi, si l'un de ces appels renvoie "null" et que vous essayez de l'utiliser ultérieurement comme s'il s'agissait d'une référence/pointeur sur un objet, c'est de là que provient votre NullPointerException.

Les coupables probables sont System.console() et console.readLine().

http://download.oracle.com/javase/6/docs/api/java/io/Console.html#readLine%28%29 dit readLine peut renvoyer une valeur nulle. http://download.oracle.com/javase/6/docs/api/java/lang/System.html#console%28%29 indique également que cet appel peut renvoyer une valeur nulle. Il vaut donc mieux vérifier les valeurs retournées dans les deux cas avant de les utiliser.

(Comme vous devriez le faire en général, si la fonction spécifie de tels résultats possibles).

+0

true, mais si readLine renvoie null, il ajoutera simplement null à l'arraylist et ne lancera pas une exception de pointeur null. – Codemwnci

+0

Vous avez raison - ArrayList est l'une de ces collections qui stocke simplement la valeur nulle. D'autres vont lancer une exception. Vous devriez le vérifier de toute façon, car si vous obtenez un résultat "nul", ce n'est pas quelque chose que vous pouvez utiliser plus tard pour les opérations de chaînes, même si vous n'obtenez pas l'exception lors du stockage du null. utiliser les données. Et plus l'Exception est éloignée de sa cause, plus il est difficile de comprendre ce qui s'est passé. Mieux vaut vérifier ici. – foo

1

Exécutez ceci dans un terminal (shell sous linux ou cmd dans Windows).

Dans mon cas, j'ai mis votre code dans un fichier (Test.java). Après la construction, IDE (Eclipse, dans mon cas) crée un fichier bin (Test.class)

Alors, allez dans ce dossier et appelez:

$ java Test 
Enter input: asdasd 

Two items: [asdasd, an entry] 

Et ça marche!

Questions connexes