-1

我正在使用系统控制台读取一行,如下面的代码

public class Strings2 
{   
    public static void main(String[] args) 
    {
        String Name;        
        Console c = System.console();
        Name = c.readLine("%s", "Name?:");

        System.out.println(Name);
    }
}

但是当我运行它时,它会生成一个 NullPointerException

在此处输入图像描述

知道为什么会这样

我在eclipse中运行上面的代码

4

5 回答 5

3

是的,它的行为如记录

返回:
系统控制台(如果有),否则为 null。

没有控制台,因此它返回 null。

如果您从控制台运行它应该没问题......但是您应该检查返回值并在它返回 null 时采取不同的措施。

于 2013-03-13T12:44:24.213 回答
2

如果您从 Eclipse 执行该代码,您肯定会收到该错误。Eclipse 使用不同的流,您无法在其中捕获控制台。但是当从 UNIX shell 或 Windows/Mac 执行时,代码会正常工作,因为底层操作系统会将控制台附加到 JVM 的资源(您的代码)。

于 2013-03-13T12:45:19.590 回答
0

公共静态控制台控制台()

返回与当前 Java 虚拟机关联的唯一 Console 对象(如果有)。

返回: 系统控制台(如果有),否则为 null。

于 2013-03-13T12:43:45.193 回答
0

通过运行调试器,从 System.console() 返回的 c 为 null;

所以下一行抛出一个空指针异常。

于 2013-03-13T12:44:24.587 回答
0

在您的上下文中, System.console() 不可用,您应该检查 null 并找到替代的行动方案。

“系统.console()

返回与当前 Java 虚拟机关联的唯一 Console 对象(如果有)。

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

_

“虚拟机是否有控制台取决于底层平台以及调用虚拟机的方式。如果虚拟机从交互式命令行启动而不重定向标准输入和输出流,那么它的控制台将“

取自 java.sun.com。

于 2013-03-13T12:48:14.567 回答