2016-07-16 18 views
0

Der folgende Code versucht, das Kennwort von der Systemkonsole zu lesen. Wenn der Benutzer innerhalb von 30 Sekunden kein Passwort eingibt, wird die Eingabeaufforderung erneut angezeigt. Allerdings merke ich, dass der Cursor nicht nach dem ersten Anruf gelöst wird zu console.readPassword()Freigeben des Cursors nach console.readPassword

Ich versuche console.reader().close(); im catch Block zu tun, die nicht geholfen haben.

Einige Kontext: Ich versuche dies als Workaround für die folgenden Gradle Issue, die die Eingabeaufforderung Enter password: überschreibt, und Benutzer bekommen ein Gefühl, als ob die Anwendung gehangen hat.

Java-Experten beraten Sie bitte.

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); 
    } 
} 

Antwort

Verwandte Themen