JDK 6中新增的Java Console类功能及常见问题 |
JDK 6中提供了java.io.Console类专用来 拜访基于字符的操纵台 设施 。假如你的Java程序要与Windows下的cmd或者Linux下的Terminal交互,就 可以用这个Java Console类代劳 。 TestConsole.java 代码: 1.package com.simon.testjdk6.console; 2. 3.import java.io.Console; 4. 5.public class TestConsole { 6. 7. /** 8. * @param args 9. */ 10. public static void main(String[] args) { 11. Console console = System.console(); // 获得Console实例对象 12. if (console != null) { // 推断是不是有操纵台的 使用权 13. String user = new String(console.readLine("Enter username:")); // 读取整行字符 14. String pwd = new String(console.readPassword("Enter passowrd:")); // 读取密码,输入时不显示 15. console.printf("Username is: " + user + "\n"); // 显示消费者名 16. console.printf("Password is: " + pwd + "\n"); // 显示密码 17. } else { 18. System.out.println("Console is unavailable."); // 揭示无操纵台 使用权限 19. } 20. 21. } 22. 23.} Java要与Console进行交互,不总是能得到可用的Java Console类的 。一个JVM是不是有可用的Console,依赖于底层平台和JVM如何被调用 。假如JVM是在交互式命令行( 比方Windows的cmd)中启动的,而且输入输出没有重定向到另外的地方,那么就我们 可以得到一个可用的Console实例 。 当你有Eclipse或NetBean中运行以上代码时Console中将会有以下文字输出: Console is unavailable. 示意Java程序 无奈 获得Console实例,是由于JVM不是在命令行中被调用的,或者输入输出被重定向了 。 在操纵台中运行代码, 动机将如下所示: 1.$ java com.simon.testjdk6.console.TestConsole 2.Enter user:Simon 3.Enter passowrd: 4.User is:Simon 5.Password is:12345 我们 可以看到:输入密码时,操纵台时不显示我们所输入的密码字符 。然而程序 可以得到并输出的密码字符串 。这便是JDK 6中新增的Java Console类的运行 模式 。 留神:在Eclipse诸如 类似的IDE工具中运行Console类 。假如没有对Console实例判空操作, 后果 使用了该实例会抛出java.lang.NullPointerException 异样 。 |