为什么在Eclipse下使用System.console().readLine()获取控制台输入时提示java.lang.NullPointerException

public class Test{
public static void main(String args[]){
while(true){
String str=System.console().readLine();
System.out.println(str);
}
}
}

语句本身是没有错的。问题的关键是这段代码若是在eclipse的运行就会有问题,而如果你用命令行的方式,先编译后运行就没有问题了。

以下是我在java高手真经第272页上看到的专业解释。
"虚拟机是否具有控制台取决于底层平台,还取决与虚拟机的方式,如果虚拟机从一个交互式命令行开始启动,且没有重定向标准输入和输出流,那么其控制台将存在,通常连接到键盘并从虚拟机启动的地方显示。如果虚拟机是自启动的(例如,有后台作业调度程序启动),那么他通常没有控制台。如果此虚拟机具有控制台,那么他将由此类唯一的实例。如果没有可用的控制台设备,那么对该方法的调用将返回null"
这就是为什么这段代码只能在控制台中执行,而不能在eclipse中运行。
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-09-18
那是以为控制台的console为空,所以会报空指针异常。
public class Test{
public static void main(String args[]){
//测试一下是否为空,如果为空就返回,如果不为空进行循环输出
Console console=System.console();
if(console==null){
System.out.println("不能使用控制台");
return;
}
while(true){
String str=System.console().readLine();
System.out.println(str);
}
}
}本回答被提问者采纳
相似回答