系统控制台生成NullPointer异常

时间:2013-03-13 12:42:25

标签: java exception

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

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

enter image description here

知道为什么会发生这种情况

我在eclipse中运行上面的代码

5 个答案:

答案 0 :(得分:3)

是的,它表现为documented

  

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

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

如果从控制台运行,应该没问题......但是如果它返回null,你应该检查返回值并采取不同的行动方案。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

public static Console console()

  

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

     

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

答案 3 :(得分:0)

运行调试器时,从System.console();

返回时,c为null

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

答案 4 :(得分:0)

在您的上下文中,System.console()不可用,您应该检查null并找到替代的操作过程。

  

“System.console()

     

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

     

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

_

  

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

取自java.sun.com。