2009-06-15 8 views
3

J'ai essayé l'API java.io.Console en utilisant eclipse. Mon exemple de code suit.Console Java API

package app; 

import java.io.Console; 

public class MainClass { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     Console console = System.console(); 
     console.printf("Hello, world!!"); 
    } 

} 

Lorsque j'ai essayé d'exécuter l'exemple, j'ai l'erreur suivante.

Exception dans le thread "principal" java.lang.NullPointerException à app.MainClass.main (MainClass.java:11)

Où est-ce que je me trompe? Merci.

Répondre

6

Étant donné que vous avez mentionné dans un commentaire que vous utilisez Eclipse, il semble qu'il n'existe actuellement aucun support pour Console dans Eclipse, d'après ce bug report. La méthode System.console renvoie une console associée à la machine virtuelle Java en cours et, en l'absence de console, renvoie null. De la documentation de la méthode System.console:

Renvoie l'objet Console unique associé à la machine virtuelle Java actuelle , le cas échéant.

Retours:

La console du système, le cas échéant, sinon null.

Malheureusement, ce comportement est correct. Il n'y a pas d'erreur dans votre code. La seule amélioration qui peut être faite est d'effectuer une vérification null sur l'objet Console pour voir si quelque chose a été retourné ou non; cela empêchera un NullPointerException en essayant d'utiliser l'objet Console inexistant.

Par exemple:

Console c = System.console(); 

if (c == null) { 
    System.out.println("No console available"); 
} else { 
    // Use the returned Console. 
} 
+0

Juste un nitpick, mais j'utiliserais System.err.println au lieu de System.out.println – Powerlord

0

System.console renvoie null si vous n'exécutez pas l'application dans une console. Voir this question pour des suggestions.

+0

Comment résoudre ce problème? Dois-je exécuter l'application dans la ligne de commande et ne pas utiliser le bouton RUN dans eclipse? – Bharani

+0

J'ai mis à jour la réponse avec un lien vers une question similaire - vous pouvez le contourner avec des consoles externes, des fichiers batch et/ou un débogage distant. Il existe également un lien vers le problème dans la base de données de bogues d'Eclipse. – McDowell

0

System.console retourne l'objet console unique, associée à la machine virtuelle Java actuelle , le cas échéant.

Vous devez tester si la console est nulle avant de l'utiliser.