在Java CLI应用程序中屏蔽密码



我在Java (CLI)中制作了这个小ATM应用程序,一开始我想要有"Code: ",然后用户应该输入它,在我的Java应用程序中,它应该说String(或int?) Code = 1234;如果工作,然后继续,如果没有错误,再试一次,如果错误3次,停止应用程序。

这样的东西会是什么样子?我已经在谷歌上搜索了几个小时的隐藏密码,并尝试了不同类型的代码,但没有任何运气。我只是想要一些简单的东西,将字符串转换为星号。

目前我的密码屏蔽看起来像这样:

java.io.Console cons;
char[] passwd;
if ((cons = System.console()) != null && (passwd = cons.readPassword("[%s]", "Code:")) != null)

但是我不能够(不知道)如何在代码中设置密码。

使用java.io.Console类的readPassword方法

Console类的API文档中有一个示例,展示了如何从控制台窗口读取密码而不以明文回显。

编辑

Michael,这段代码是为了让用户在控制台窗口中输入关键字而不显示它。用户完成该操作后,密码存储在变量passwd中。似乎你真正想要的是完全不同的东西:你有其他程序要求输入密码,而你希望你的程序自动输入密码。

如果这确实是你想要做的,那么你不需要使用Console类。您可以尝试使用java.awt.Robot类在另一个应用程序中输入击键(但我不确定它是否会与控制台窗口一起工作-请尝试一下)。

这个网站有一个你想做的事情的例子:http://download.oracle.com/javase/tutorial/essential/io/cl.html

为了更彻底,这里有两个类似教程的链接。


他们回答你的问题了吗?


根据你的注释,也许你没有完全理解Java语法。

你不能写:

char["mypassword"] passwd;

我想你的意思是:

String str = "mypassword";
char[] passwd = str.toCharArray();

试试这个代码:

Console c = System.console();
if (c == null) {
    System.err.println("No console.");
    System.exit(1);
}
char [] passwd = c.readPassword("Enter your password: ");
c.println("Password is:");
c.println(new String(passwd));

看看这篇sun Java文章…它强调了许多不同的方法来做到这一点。

具体来说,它展示了如何使用AWT的TextField类和setEchoChar()方法,以及一个方法,该方法运行一个单独的线程来删除和替换控制台应用程序中键入的字符。

最新更新