idea中使用System.console()获取Console为null

问题描述:
Scanner类从控制台读取输入是可见的,不适用于读取密码,JavaSE 6特别引入了Console类实现读取密码的需求。

		Console console =  System.console();
        System.out.print("请输入你的名字:");
        String personName = console.readLine();
        System.out.print("请输入你的密码:");
        char[] password = console.readPassword();

为了安全起见,返回的密码存放在一维字符数组中而不是字符串中。
在这里插入图片描述
用idea运行控制台输出console为null。
原因:如果Java程序要与windows下的cmd或者Linux下的Terminal交互,就可以使用这个Java Console类代劳。Java要与Console进行交互,不总是能得到可用的Java Console类的。一个JVM是否有可用的Console,依赖于底层平台和JVM如何被调用。如果JVM是在交互式命令行(比如Windows的cmd)中启动的,并且输入输出没有重定向到另外的地方,那么就可以得到一个可用的Console实例。
但当使用Eclipse等IDE运行以上代码时Console中将会为null。 表示Java程序无法获得Console实例,是因为JVM不是在命令行中被调用的,或者输入输出被重定向了。在Eclipse诸如类似的IDE工具中运行Console类。如果没有对Console实例判空操作,结果使用了该实例会抛出java.lang.NullPointerException异常。
在这里插入图片描述
相同的代码在cmd下可以运行成功:
在这里插入图片描述
补充:代码中的中文在cmd显示乱码问题的解决:将编写代码的文件编码改成GBK后重新编译运行
在这里插入图片描述
部分参考:https://blog.csdn.net/m0_37450089/article/details/84574917

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值