【问题标题】:NullPointerException in Console's readLine()控制台的 readLine() 中的 NullPointerException
【发布时间】:2009-12-16 22:34:47
【问题描述】:

这个:

Console c = System.console();
        String readline;
        String u = c.readLine("%s", "args");

抛出一个NullPointerException. 但该方法的签名是:

 public String readLine(String fmt, Object... args)

为什么会抛出这个异常?

【问题讨论】:

    标签: java console


    【解决方案1】:
    Console c = System.console();
    

    c 是否为空?

    Doc:

    公共静态控制台console()

    返回唯一的控制台对象 与当前 Java 相关联 虚拟机,如果有的话。

    返回:系统控制台,如果有的话, 否则为空

    【讨论】:

    • 哦...如何从 Netbeans 获取控制台对象?
    • 我没有尝试在 Netbeans 中使用这个调用,但是你可以在 Eclipse 中使用远程调试来解决这个问题:stackoverflow.com/questions/104254/… 我确信在 Netbeans 中可以做类似的事情。
    【解决方案2】:

    NullPointerException 是一个 RuntimeException,这意味着它不必在方法签名中声明。

    【讨论】:

    • 这是对为什么抛出 NPE 的问题的答案,因为签名没有指定任何异常。当我阅读这个问题时,这似乎是提问者的主要困惑点。
    【解决方案3】:

    通过:http://www.codeguru.com/forum/showthread.php?t=487190 了解详情

    在使用方法之前,总是需要阅读 API 文档以了解该方法的作用。例如 console() 方法的文档说:

    引用:

    虚拟机是否有 控制台取决于 底层平台以及 虚拟机的方式 调用。如果虚拟机是 从交互式命令开始 不重定向标准的行 输入和输出流然后它的 控制台将存在并且通常会 连接到键盘和 显示来自哪个虚拟机 已启动,推出。如果虚拟机 自动启动,例如 由后台作业调度程序,然后它 通常不会有控制台。

    如果此虚拟机有控制台 然后它由一个唯一的表示 这个类的实例可以是 通过调用获得 System.console() 方法。如果没有控制台 设备可用,然后调用 of那个方法会返回null.of那个方法会返回null。

    如果您尝试使用 java 命令从命令行调用程序,那么它将有一个控制台,并且该方法不应返回 null。该方法将返回 null。

    或者,使用 Scanner 类将在您的 IDE 内部工作:

    Scanner sc = new Scanner(System.in);

    【讨论】:

      【解决方案4】:

      因为 System.console() 在您使用的 IDE 中是 null。改用java.util.Scanner

      import java.util.Scanner;
      Scanner s = new Scanner(System.in);
      String u = s.nextLine();
      

      【讨论】:

      • 这是一个替代方案,而不是一个答案。人们尝试使用控制台是有原因的,它是为了 readPassword
      【解决方案5】:

      c 是否为 null?

      顺便说一句,您的 readLine 语句等同于 c.readLine("args") - 这是您想要的吗?

      【讨论】:

        【解决方案6】:

        System.console() 返回 null,它是 sn-p 代码中唯一可能引发空指针异常的行。

        【讨论】:

          【解决方案7】:

          代码 sn-p 中有一些奇怪的地方。你声明了一个名为“readline”的变量,但你没有初始化它,也没有使用它。

          有没有可能在程序中你以某种方式使用这个变量而没有初始化它? (远射,我知道)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-04-22
            • 2011-06-26
            • 2011-05-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多