先上代码:
import java.io.Console;
public class TestConsole {
public static void main(String[] args) {
Console cons = System.console();
char[] pwd = cons.readPassword("pwd:");
System.out.println(pwd.toString());
}
}
Exception in thread "main" java.lang.NullPointerException
查看说明文档知道了原因如下:
访问与当前Java虚拟机关联的基于字符的控制台设备(如果有的话)的方法。
虚拟机是否具有控制台取决于底层平台以及虚拟机的调用方式。 如果虚拟机从交互式命令行启动,而不重定向标准输入和输出流,则其控制台将存在,并且通常将连接到启动虚拟机的键盘和显示器。 如果虚拟机是自动启动的,例如由后台作业调度程序启动,则通常不具有控制台。
如果这个虚拟机有一个控制台,那么它由一个这个类的唯一实例表示,可以通过调用System.console()方法获得。 如果没有控制台设备可用,则该方法的调用将返回null 。
读取和写入操作是同步的,以保证关键操作的原子完成; 因此调用方法readLine() , readPassword() , format() , printf()以及读,格式和写在由返回的对象的操作reader()和writer()在多线程方案可能阻塞。
对reader()和writer()返回的对象调用close()将不会关闭这些对象的基础流。
当达到控制台输入流的结尾时,控制台读取方法返回null ,例如在Windows上通过在Unix或control-Z上键入control-D。 如果以后在控制台的输入设备上输入其他字符,后续读取操作将成功。
除非另有说明,否则传递null参数到此类中的任何方法将导致NullPointerException被抛出。