¿Por qué la consola no solicita una entrada?

import java.io.*;

public class ConsoleDemo {

public static void main(String[] args) {
    String str;
    Console con;

    con = System.console();

    if (con == null)
        return;

    str = con.readLine("Enter a string :    ");
    con.printf("Here is your string %s", str);
  }
}

Copié este código del libro, que dice que recibiría un aviso en la pantalla para ingresar una cadena, pero mi IDE solo da el mensaje de que la ejecución ha terminado, sin darme un aviso.

preguntado el 11 de junio de 12 a las 19:06

Tendrás que hacer algo con System.in ya que este es el canal de entrada de la consola (el inverso de System.out que puede usar para imprimir texto en la consola) -

if(con==null) return; Esta es la única forma de salir sin ver el resultado... Así que verifique si hay un valor nulo e imprima que sea nulo, luego puede hacer la siguiente pregunta: ¿Por qué System.console() devuelve un valor nulo cuando se ejecuta en ? -

@SteveH. ¿Alguna forma de asignar a la consola un valor no nulo? -

5 Respuestas

Eclipse ni Netbeans admiten el uso de Console. El método Console.istty() devolverá falso y no tendrá una consola para usar.

Puede cambiar su código a lo siguiente y lograr el mismo resultado y poder ejecutarlo desde el IDE.

import java.io.*; 

public class ConsoleDemo { 

    public static void main(String[] args) { 
        Scanner scan = new Scanner(System.in);
        System.out.println("Enter a String and press enter");
        System.out.println("You entered the String: " + scan.nextLine()
    } 
} 

Respondido el 11 de junio de 12 a las 20:06

¿Qué IDE estás usando? Este código funciona bien cuando lo ejecuta desde la línea de comandos, por lo que el problema radica claramente en la configuración de su IDE.

Utilice los siguientes comandos para compilar y ejecutar su código desde la línea de comandos:

javac ConsoleDemo.java
java ConsoleDemo

Editar: las este enlace sugiere, usando System.Console no siempre funciona en IDE. Alternativamente, puede usar System.in.

Respondido el 11 de junio de 12 a las 19:06

Estoy usando Eclipse IDE para codificar y compilar. - rIshab1988

En ese caso tu pregunta es muy similar a esta pregunta. Echa un vistazo allí. - pilar

Su código funciona tanto desde Eclipse como desde el símbolo del sistema.

Pruebe de esta manera también si está usando Java 5 o +

Scanner in = new Scanner(System.in);
System.out.print("Enter a String : ");
String string = in.nextLine();
System.out.println("Here is your String : " + string);

Respondido el 11 de junio de 12 a las 19:06

De forma predeterminada, Eclipse no asocia la consola con la JVM. Puede que tengas que configurarlo. Pero si lo ejecuta en la línea de comandos, definitivamente tendrá consola y, por lo tanto, se ejecutará sin ningún problema.

Respondido el 11 de junio de 12 a las 20:06

Es porque su IDE ejecuta este código por javaw.exe (sin ventanas -> sin consola) no java.exe (con ventana de consola), así que System.console() devuelve nulo.

La solución estándar es leer datos del flujo de entrada que está representado por System.in para que pueda usar, por ejemplo, Scanner como

Scanner keybord = new Scanner(System.in);
String line = keybord.readLine();

Respondido 20 Oct 14, 18:10

Estoy usando Eclipse IDE. ¿Alguna salida? - rIshab1988

Nunca conseguí que Eclipse manejara System.console correctamente; no estoy seguro de si tiene que ver con javaw o java, pero eso nunca funcionó para mí dentro de Eclipse. - Liv

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.