繁体   English   中英

为什么会出现空指针异常

[英]Why am I getting a null pointer exception

今天是我学习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为null(即使我实例化了它?)。

我问这个问题有点傻,但是如何使控制台“不为空”。 我以为我通过使用Console console = System.console()来完成。

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

编辑2

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

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

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

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

在终端(Linux中的Shell或Windows中的cmd)中运行此命令。

就我而言,我将您的代码放在文件(Test.java)中。 生成后,IDE(以我的情况为例)创建一个bin文件(Test.class)

因此,只需转到此文件夹并调用:

$ java Test
Enter input: asdasd

Two items: [asdasd, an entry]

和工程!

您没有检查任何结果值。 因此,如果其中一个调用返回“ 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。 因此,最好在使用这两种情况之前检查返回的值。

(通常,如果函数指定了可能的结果,则应这样做)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM