interfaz - joptionpane java
Hacer que la consola espere una entrada de usuario para cerrar (8)
Tengo una aplicación de consola que, después de realizar sus tareas, debe informar al usuario, como "operación completada" o "operación fallida" y el error detallado.
El problema es que si simplemente "lo dejo correr", el mensaje de salida se imprimirá 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 "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 Scanner, pero dado que "input" es mi instancia de Scanner:
input.next()
System.exit(0);
"Cualquier tecla" funcionará, excepto para el retorno, que es un gran problema aquí. Cualquier punteros?
Un truco simple:
import java.util.Scanner;
/ * Agrega estos códigos al final de tu método ... * /
Entrada del escáner = Nuevo escáner (System.in);
System.out.print ("Presione Entrar para salir ...");
input.nextLine ();
El problema con la entrada de la consola Java es que se trata de una entrada almacenada en búfer y requiere una tecla de entrada para continuar.
Existen estas dos discusiones: Detectar y actuar sobre las teclas de dirección del teclado en Java y Java, análisis de entrada en una aplicación de consola
El último de los cuales utilizó JLine para resolver su problema.
Yo personalmente no lo he usado.
En Java esto sería System.in.read()
He puesto en lo que dijo x4u. Eclipse quería un bloque de captura de prueba a su alrededor, así que dejé que me lo generara.
try {
System.in.read();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Probablemente puede tener todo tipo de timbres y silbidos, pero creo que para los principiantes que quieren que una ventana de línea de comandos no salga, debería estar bien.
Además, no sé qué tan común es esto (esta es la primera vez que hago archivos jar), pero no se ejecutaría solo, solo a través de un archivo bat.
java.exe -jar mylibrary.jar
Lo anterior es lo que tenía el archivo bat en la misma carpeta. Parece ser un problema de instalación.
El tutorial de Eclipse vino de: http://eclipsetutorial.sourceforge.net/index.html
Algunas de las respuestas también vinieron de: Oracle Thread
Me gustaría agregar que normalmente querrá que el programa espere solo si está conectado a una consola. De lo contrario (como si fuera parte de una pipeline ) no tiene sentido imprimir un mensaje o esperar. Para eso podrías usar la Console
de Java como esta:
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();
}
}
Puedes usar 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 que presione excepto Enter
significa que tendrá que presionar Entrar después de eso, pero lo encontré mejor que scan.next();
Utilicé un hack simple, pidiéndole a windows que usara comandos cmd y lo envié a null.
// 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();
}
}
public static void main(String args[]) {
Scanner s=new Scanner(System.in);
System.out.println("Press enter to continue.....");
s.nextLine();
}
Esta nextline
es una opción bastante buena ya que nos ayudará a correr la siguiente línea cada vez que se presione la tecla Intro