以下代码尝试从系统控制台读取密码。
如果用户在30秒内未输入密码,则会再次显示提示。但是,我注意到第一次调用后光标没有被释放
到console.readPassword()
我确实尝试在console.reader().close();
区块中执行catch
但没有帮助。
某些上下文:我尝试将此作为以下Gradle Issue的解决方法,它覆盖了提示Enter password:
,用户会感觉应用程序已挂起。
Java专家请指教。
public final class RetryPassword {
public static char [] getPassword() {
Console console = System.console();
Callable<char[]> password = new Callable<char[]>() {
@Override
public char[] call() {
return console.readPassword("Enter password: ");
}
};
final ExecutorService executor = Executors.newSingleThreadExecutor();
final Future<char[]> future = executor.submit(password);
executor.shutdown();
try {
return future.get(30, TimeUnit.SECONDS);
}
catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
char [] p = getPassword(); // first call to read password
if (p == null) {
p = getPassword(); // try again
}
System.out.println(p);
}
}
答案 0 :(得分:0)
这可以通过以下方式解决 http://www.javaspecialists.eu/archive/Issue153.html
从以下question
获得的解决方案