最近博主想重新学习一下Java,其中在学习Console使用时发现了问题。代码如下,十分简单:
import java.io.Console;
public class InputOutput {
public static void main(String[] args) {
Console cons=System.console();
String name=cons.readLine("username:");
char[] pwd=cons.readPassword("password:");
System.out.println("name"+name+"pwd"+pwd.toString());
}
}
但是不可思议的是这么几行代码运行竟然会有问题,问题如下:
出错代码如下:
String name=cons.readLine("username:");
也就是说这里出现了空指针,问题应该出现在cons这个对象上,打印发现cons果然为null:
觉得事情不太对劲,去查看了下API手册:
红框中的意思简单来说就是System.console()方法与虚拟机是否具有控制台有关系,如果有,那么就可以使用,没有则该方法返回null。
那么为什么eclipse上不可以运行呢?
因为eclipse将应用程序作为后台进程运行,而不是作为带有系统控制台的顶级进程运行。也就是说System.console()在eclipse的机制下只会返回null,而在IDEA环境下可以正常运行。
替代console的方法
public class ReadingDemo {
public static void main(String[] args) {
// ==== BufferedReader
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Please enter user name : ");
String username = null;
try {
username = reader.readLine();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("You entered : " + username);
// ===== In Java 5, Java.util,Scanner is used for this purpose.
Scanner in = new Scanner(System.in);
System.out.print("Please enter user name : ");
username = in.nextLine();
System.out.println("You entered : " + username);
}
}