【问题标题】:Why am I getting a null pointer exception为什么我得到一个空指针异常
【发布时间】:2011-04-14 03:10:43
【问题描述】:

今天是我学习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

好的

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

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

【问题讨论】:

  • 你能在这里发布异常吗?
  • 如果您不在终端中运行代码,System.console() 可以返回 null。您是否在 IDE 中运行此代码?
  • @McD:这是目前唯一可能的原因。您应该将其发布为答案:)
  • 嗯,我在 netbeans 中运行代码。我基本上只是写了代码并点击了调试按钮
  • 它必须是 System.console()。您没有对会导致空指针异常的对象执行任何其他操作。正如@McDowell 指出的那样, System.console() 可以返回一个空值。

标签: java console nullpointerexception


【解决方案1】:

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

【讨论】:

    【解决方案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();
    

    【讨论】:

    • java 自 1.6 以来确实有 System.console() - 检查 java.lang.System 的当前文档。
    【解决方案3】:

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

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

    所以,只要去这个文件夹并调用:

    $ java Test
    Enter input: asdasd
    
    Two items: [asdasd, an entry]
    

    并且有效!

    【讨论】:

      【解决方案4】:

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

      可能的罪魁祸首是 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。 所以最好在使用它们之前检查两种情况下返回的值。

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

      【讨论】:

      • true,但是如果readLine返回null,它只会简单地将null添加到arraylist中,不会抛出空指针异常。
      • 你是对的 - ArrayList 是那些只存储空值的集合之一。其他人会抛出异常。无论如何你都应该检查它,因为如果你得到一个“null”结果,那你以后就不能用于字符串操作了,所以即使你在存储 null 时没有得到异常,你会在尝试时得到它使用数据。异常离它的原因越远,就越难理解发生了什么。最好在那儿检查一下。
      猜你喜欢
      • 2011-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多