2011-05-17 16 views
58

Tengo una aplicación de consola que después de realizar sus tareas debe informar al usuario, como "operación finalizada" o "operación fallida" y el error detallado.Hacer que la consola espere a que el usuario ingrese para cerrar

El problema es que, si solo "lo dejo funcionar", se imprimirá el mensaje de salida pero la consola se cerrará poco después, sin dejar tiempo para leer el mensaje.

Por lo que recuerdo, en C++, cada aplicación de consola terminará con un "presionar cualquier tecla para salir" o algo así. En C# puedo simular este comportamiento con un

Console.ReadKey(); 

Pero, ¿cómo puedo hacerlo en Java? Estoy usando la clase de escáner, pero teniendo en cuenta que "de entrada" es mi instancia de escáner:

input.next() 
System.exit(0); 

"Cualquier tecla" va a funcionar, a excepción de retorno, lo cual es un gran problema aquí. ¿Alguna sugerencia?

Respuesta

70

En Java esto sería System.in.read()

+12

Esto satisface "Pulse Intro para salir", pero no "Pulse cualquier tecla para salir" , ya que no continuará hasta que se presione la tecla Intro. –

+0

Supongo que "presionar enter para salir" es mejor que "presionar cualquier tecla EXCEPTO enter para salir". Gracias, eso hará por mí. – makoshichi

+0

Mi aplicación simplemente "cuelga" con System.in.read() – marcolopes

5

He puesto lo que dijo x4u. Eclipse quería un bloque de captura de prueba a su alrededor, así que lo dejé generar para mí.

try { 
     System.in.read(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

Probablemente puede tener todo tipo de campanas y silbatos en él, pero creo que para los principiantes que quieren una ventana de línea de comando no abandonar este debe estar bien.

Además, no sé qué tan común es esto (esta es la primera vez que hago archivos jar), pero no se ejecuta solo, solo a través de un archivo bat.

java.exe -jar mylibrary.jar 

Lo anterior es lo que el archivo bat tenía en la misma carpeta. Parece ser un problema de instalación.

Eclipse tutorial vino de: http://eclipsetutorial.sourceforge.net/index.html

Parte de la respuesta también vinieron de: Oracle Thread

16

me gustaría añadir que por lo general se desea que el programa que esperar sólo si está conectado a una consola. De lo contrario (como si fuera parte de un pipeline) no tiene sentido imprimir un mensaje o esperar.Para que usted podría utilizar Java de Console así:

import java.io.Console; 
// ... 
public static void waitForEnter(String message, Object... args) { 
    Console c = System.console(); 
    if (c != null) { 
     // printf-like arguments 
     if (message != null) 
      c.format(message, args); 
     c.format("\nPress ENTER to proceed.\n"); 
     c.readLine(); 
    } 
} 
2

sólo puede utilizar nextLine(); como pausa

import.java.util.Scanner 
// 
// 
Scanner scan=new Scanner(); 

void Read() 
{ 
    System.out.print("Press any key to continue . . .); 
    scan.nextLine(); 
} 

Sin embargo cualquier botón se pulsa excepto Introduzca usted tiene que presionar Enter después de eso, pero me pareció mejor que scan.next();

2

Utilicé el truco simple, pidiendo a Windows que use comandos cmd, y lo envíe a nulo.

// Class for Different hacks for better CMD Display 
import java.io.IOException; 
public class CMDWindowEffets 
{ 
    public static void getch() throws IOException, InterruptedException 
    { 
     new ProcessBuilder("cmd", "/c", "pause > null").inheritIO().start().waitFor(); 
    }  
} 
1
public static void main(String args[]) { 
     Scanner s=new Scanner(System.in); 

     System.out.println("Press enter to continue....."); 

     s.nextLine(); 

    } 

Este nextline es bastante buena opción, ya que nos ayudará a correr siguiente línea cada vez que se pulsa la tecla enter

Cuestiones relacionadas