Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > System.console() NullPointerException

Saludos,
Llevo un tiempo intentado capturar la entrada de una contraseña desde cmd.exe en un programa java (fragmento de codigo):

Console cons = System.console();
if (cons != null) {
char[] passwd = cons.readPassword(“Introduce tu contraseña: “);
credenciales[1] = passwd.toString();
}

Sería lógico que me mande un NullPointerException si lo ejecuto desde NetBeans pero el caso es que lo ejecuto desde cmd en windows7 con java 1.7 (java -jar miBot.jar) y me sigue dando NullPointerException. Alguna idea?¿

julio 9, 2012 | Registered Commenterignasificus

¿En qué línea de código te lanza ese NPE?

julio 9, 2012 | Registered Commenterchoces

Vale, me respondo ya que al final he conseguido que me funcione aunque no sabría decir donde estaba el error.
Este es el método que me causaba el NullPointerException:

//Metodo solicitar nombre usuario y contraseña MOLÓN
public String[] solicitarCredencialesEnmascaradas() {
try (Scanner entrada = new Scanner(System.in)) {
System.out.println("Introduce tu nombre de usuario de steam:");
credenciales[0] = entrada.nextLine();
}

Console cons = System.console();
if (cons != null) {
char[] passwd = cons.readPassword("Introduce tu contraseña de steam: ");
credenciales[1] = passwd.toString();
}
else {
throw new RuntimeException("Excepción al utilizar la consola");
}
return credenciales;
}

Y este otro es el nuevo que si que funciona:

public String[] solicitarCredenciales2() {
Console cons = System.console();
Scanner scan = new Scanner(System.in);
System.out.println("Escribe tu nombre de usuario: ");
String nombre = scan.nextLine();
char[] passwd = cons.readPassword("Escribe tu contraseña: ");
String password = passwd.toString();
credenciales[0] = nombre;
credenciales[1] = password;
return credenciales;
}

Ahora bien, me captura la contraseña y la convierte y retorna correctamente pero sin embargo me surge otro problema y es que al parecer la codificación de caracteres de la consola no se corresponde. Es decir introduzco 'tripichurla' y me devuleve '[C@454322ba'. Maldita sea!
El error me saltaba siempre al solicitar que ingresara el password y me indicaba la linea de dentro del 'else' throw new RuntimeException("Excepción al utilizar la consola");

julio 9, 2012 | Registered Commenterignasificus

Vale, debo de sufrir cierto retraso o algo. El caso es que ya me he dado cuenta de otro fallo mío.
Lo que comentaba anteriormente de que la entrada por consola al parecer se realizaba con una codificación de caracteres bizarra no es tal cosa sino que por lo visto al utilizar el método .toString() sobre el array de caracteres me los convertía de una manera extraña y resultaba en algo ininteligible. He recorrido el Array con un System.out.print y efectivamente si que está bien escrito. Ahora veré de que manera pasarlo a String sin cargármelo.
Grácias por aguantarme :D

julio 9, 2012 | Registered Commenterignasificus

La mejor manera de convertir un array a String se realiza usando Arrays.toString

julio 9, 2012 | Registered Commenterchoces