我正在使用系统控制台读取一行,如下面的代码
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中运行上面的代码
答案 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。