为什么我得到空指针异常

时间:2010-09-18 16:13:08

标签: java console nullpointerexception

今天是我学习java的第一天:)

我在运行一个非常简单的例子时遇到了问题(不是一个好的开始)。

这只是一个简单的示例,它要求用户输入并将其打印出来,但是当我尝试从控制台读取一行时,我得到一个空指针异常。

我不明白因为一切似乎都被实例化了。

 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);
    } 

编辑1

正如许多人指出的那样,当我尝试从控制台读取一行时因为控制台为空(即使我正在实例化它?)而抛出错误。

我觉得这有点傻,但我怎么能让控制台“不为空”。我认为我使用的是Console console = System.console()。

我对工作流程的期望是使用netbeans编写一个简单的用户输入。 点击调试按钮。 看到弹出的屏幕。 输入一些文字。 见输出。

编辑2

O.K

经过一番挖掘后,发现你无法在netbeans中使用system.console。 我不明白为什么。 我只是用户扫描仪。

现在我不确定接受o-0的答案

4 个答案:

答案 0 :(得分:2)

必须是System.console()。您没有对可能导致空指针异常的对象执行任何其他操作。正如@McDowell指出的那样,System.console()可以返回空值

答案 1 :(得分:2)

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

而不是使用以下代码;我认为System.console用于.Net平台

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

答案 2 :(得分:1)

在终端(linux中的shell或windows中的cmd)中运行它。

就我而言,我把你的代码放在一个文件中(Test.java)。 构建之后,IDE(eclipse,在我的例子中)创建一个bin文件(Test.class)

所以,只需转到此文件夹并致电:

$ java Test
Enter input: asdasd

Two items: [asdasd, an entry]

并且有效!

答案 3 :(得分:0)

您没有检查任何结果值。因此,如果其中一个调用返回“null”,并且您尝试随后使用它,就好像它是一个对象的引用/指针,那就是Nul​​lPointerException的来源。

可能的罪魁祸首是System.console()和console.readLine()。

http://download.oracle.com/javase/6/docs/api/java/io/Console.html#readLine%28%29表示readLine可能返回null。 http://download.oracle.com/javase/6/docs/api/java/lang/System.html#console%28%29也表示此调用可能会返回null。 因此,在使用它们之前,最好先检查两种情况下返回的值。

(正如你应该做的那样,如果函数指定了这样的可能结果)。