IntelliJ IDEA软件 java银行系统怎么将密码输出改成*号?
3条回答 默认 最新
- 俺不理解 2021-12-28 11:40关注
两种方案,你看看你需要的是什么吧~
1. 使用 System.console()
public class Test { public static void main(String[] args) throws IOException { Console console = System.console(); System.out.println("请输入密码: "); char[] pas = console.readPassword(); System.out.println(new String(pas)); } }
效果大概是:空白的输入,不可见。但是此方法不可以在IDE内的控制台使用,会报空指针,只能在真实的控制台使用
2. 开辟单线程覆盖输入
import java.io.IOException; import java.io.InputStream; import java.util.LinkedList; import java.util.List; public class Test { public static void main(String[] args) throws IOException { String password = readPassword("请输入密码: "); System.out.println(password); } public static String readPassword(String prompt) { EraserThread et = new EraserThread(prompt); Thread mask = new Thread(et); mask.start(); StringBuilder password = new StringBuilder(); InputStream inputStream = System.in; byte[] buffer = new byte[1]; List<Byte> result = new LinkedList<>(); try { while (inputStream.read(buffer) != -1) { if (buffer[0] == 10) { // stop masking et.stopMasking(); break; } result.add(buffer[0]); } } catch (IOException ioe) { ioe.printStackTrace(); } for (Byte b : result) { password.append((char) b.byteValue()); } // return the password entered by the user return password.toString(); } static class EraserThread implements Runnable { private volatile boolean stop; public EraserThread(String prompt) { System.out.print(prompt + " "); } public void run() { stop = true; while (stop) { System.out.print("\010*"); try { Thread.currentThread().sleep(100); } catch (InterruptedException ie) { ie.printStackTrace(); } } } /** * Instruct the thread to stop masking */ public void stopMasking() { this.stop = false; } } }
效果大概是
可以实现你说的*号效果,也可以在IDE内部的控制台实现覆盖效果,但是无法正常接收输入,在真实的控制台可以正确接收输入
解决 2无用
悬赏问题
- ¥15 关于#vue.js#的问题:修改用户信息功能图片无法回显,数据库中只存了一张图片(相关搜索:字符串)
- ¥15 spaceclaim模型变灰色
- ¥15 求一份华为esight平台V300R009C00SPC200这个型号的api接口文档
- ¥15 就很莫名其妙,本来正常的Excel,突然变成了这种一格一页
- ¥15 字符串比较代码的漏洞
- ¥15 欧拉系统opt目录空间使用100%
- ¥15 ul做导航栏格式不对怎么改?
- ¥15 现在研究生在烦开题,看了一些文献,但不知道自己要做什么,求指导。
- ¥30 vivado封装时总是显示缺少一个dcp文件
- ¥100 pxe uefi启动 tinycore