2009-12-16 86 views

回答

17
Console c = System.console(); 

c null?

Doc

公共静态console控制台()

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

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

+0

是不是工厂方法? – andandandand 2009-12-16 22:38:30

+0

哦......我如何从Netbeans获得控制台对象? – andandandand 2009-12-16 22:41:04

+0

我还没有尝试过在Netbeans中使用这个调用,但是你可以在Eclipse中使用远程调试来获得这个:http://stackoverflow.com/questions/104254/java-io-console-support-in-eclipse-ide/105403#105403我相信在Netbeans中可以做类似的事情。 – McDowell 2009-12-16 22:43:20

4

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

+1

鉴于签名没有指定任何例外情况,它是NPE被抛出问题的答案。在我读到这个问题时,这似乎是提问者混淆的主要观点。 – 2009-12-16 23:03:17

2

c null莫名其妙?

顺便说一句,您的readLine语句相当于c.readLine("args") - 这是你的意图吗?

1

代码片段中有些奇怪的东西。你声明了一个名为“readline”的变量,但是你不要初始化它,也不要使用它。

是否有可能在程序中以某种方式使用此变量而不是初始化它? (远射,我知道)

+0

这是一本教科书示例。 – andandandand 2009-12-16 22:44:03

2

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

4

通过:http://www.codeguru.com/forum/showthread.php?t=487190查看详细

使用的方法之前,总是值得阅读的方法做什么的API文档。用于控制台()方法示例文档说:

引用:

无论是虚拟机具有 控制台取决于 底层平台,也和 方式,其中虚拟机是调用了 。如果虚拟机是 从一个交互式命令 行开始,而不需要重新定向标准 输入和输出流然后其 控制台将存在,并且通常将 被连接到键盘和 显示从该虚拟机 推出。如果虚拟机 由后台作业调度程序自动启动,例如 ,则它通常不会有控制台。

如果此虚拟机具有控制台 那么它是由可通过调用 System.console()方法获得 这个类的一个独特 实例表示。如果没有控制台 设备可用,则该方法的调用 将返回null.of该方法将返回null。

如果您尝试使用java命令,然后将有一个控制台和方法不应该返回null.of该方法将返回null从命令行调用程序。

或者,使用扫描仪类将你的IDE里面工作:

Scanner sc = new Scanner(System.in);

0

因为System.console()是您正在使用的IDE null。请尝试使用java.util.Scanner代替:

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