2009-06-15 11 views
3

Ich versuchte die java.io.Console API mit Eclipse. Mein Beispielcode folgt.Java-Konsole 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!!"); 
    } 

} 

Wenn ich versuchte, das Beispiel auszuführen, bekam ich den folgenden Fehler.

Exception in thread "main" java.lang.NullPointerException bei app.MainClass.main (MainClass.java:11)

Wo habe ich falsch gemacht? Vielen Dank.

Antwort

6

Da Sie in einem Kommentar erwähnt haben, dass Sie Eclipse verwenden, scheint es derzeit keine Unterstützung für Console in Eclipse, nach diesem bug report. Die Methode System.console gibt eine Konsole zurück, die der aktuellen Java Virtual Machine zugeordnet ist. Wenn keine Konsole vorhanden ist, wird null zurückgegeben. Aus der Dokumentation der System.console Methode:

Gibt das eindeutige Console Objekt mit der Maschine virtuellen aktuellen Java verbunden ist, falls vorhanden.

Returns:

Die Systemkonsole, falls vorhanden, sonst null.

Leider ist dies das richtige Verhalten. Ihr Code enthält keinen Fehler. Die einzige Verbesserung, die gemacht werden kann, besteht darin, eine null Prüfung an dem Console Objekt durchzuführen, um zu sehen, ob etwas zurückgegeben wurde oder nicht; Dies verhindert NullPointerException, indem versucht wird, das nicht vorhandene Objekt Console zu verwenden.

Zum Beispiel:

Console c = System.console(); 

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

Nur ein Nitpick, aber ich würde System.err.println anstelle von System.out.println verwenden – Powerlord

0

System.console gibt null zurück, wenn Sie die Anwendung nicht in einer Konsole ausführen. Vorschläge finden Sie unter this question.

+0

Wie dieses Problem beheben? Sollte ich die Anwendung in der Befehlszeile ausführen und nicht die RUN-Taste in Eclipse verwenden? – Bharani

+0

Ich aktualisierte die Antwort mit einem Link zu einer ähnlichen Frage - Sie können mit externen Konsolen, Batch-Dateien und/oder Remote-Debugging umgehen. Es gibt auch eine Verknüpfung zu dem Problem in der Eclipse-Fehlerdatenbank. – McDowell

0

System.console gibt das eindeutige Console Objekt im Zusammenhang mit der aktuellen Java virtuellen Maschine, falls vorhanden.

Sie müssen testen, ob die Konsole null ist, bevor Sie sie verwenden.