Wie Passwort-Eingabe (ohne Echo!) über Konsole ?

ernst

Top Contributor
Hallo zusammen,
Ein Anwender soll über Konsole (also ohne GUI) ein oder mehrere Zeichen eingeben können, ohne daß diese auf dem Bildschirm erscheinen (wie bei einer Passworteingabe).
Wie kann man das in Java machen ?

Mit dem Scanner kann ich zwar alles mögliche eingeben, doch leider erscheint diese Eingabe auch auf dem Bildschirm !

mfg
E.
 
Hallo ernst,

das kannst du mit der (seit Java 6) mitgelieferten Console#readPassword(); Methode umsetzen.

Die Methode liefert ein Char-Array zurück, welches du dann noch in einen String umwandeln musst.
Hier mal ein kurzes Beispiel:

Java:
Console c = System.console();
char[] passArray = c.readPassword();

Gruß
Robert
 
Hallo Robert,
Meine Entwicklungsumgebung ist Netbeans.
Wenn ich den von dir vorgeschlagenen Code eingebe und ihn debugge,
wird c zu null.
Was mache ich falsch ?

PS:
Ich will mein Programm nicht in einem "DOS-Fenster" (auf der Eingabeaufforderungsebene) aufrufen, sondern in der Entwicklungsumgebung.
Dort gibt es dieses Problem. Kann man es auch dort beheben ?
(MIt dem Scanner funktioniert es doch auch. Leider wird dort eben bei Eingeben das Echo gemacht).
 
Zuletzt bearbeitet:
Hallo ernst,

mMn wird diese Funktion von den meisten IDEs nicht unterstützt. Versuch das mal mit einem Terminal zu compilieren - dort sollte es eigentlich funktionieren.

Solltest du es unbedingt in einer IDE benutzen wollen muss ich leider passen.
Mir ist zwar ein Workaround bekannt aber ich würde es dir nicht empfehlen zu benutzen, da es auch nicht 100% funktioniert.

Vollständigkeitshalber poste ich es trotzdem mal hier:

Java:
public class Foobar{

    public static void main(String[] args) throws Exception 
    {
        ConsoleEraser consoleEraser = new ConsoleEraser();
        System.out.print("Password?  ");
        BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
        consoleEraser.start();
        String pass = stdin.readLine();
        consoleEraser.halt();
        System.out.print("\b");
        //System.out.println("Password: '" + pass + "'");
    }
}

class ConsoleEraser extends Thread {

    private boolean running = true;

    @Override
    public void run() {
        while (running) {
            System.out.print("\b ");
        }
    }

    public synchronized void halt() {
        running = false;
    }
}

Gruß
Robert
 

Zurück
Oben