Заставьте консоль ждать закрытия пользовательского ввода
у меня есть консольное приложение, которое после выполнения своих задач должно дать обратную связь пользователю, например "операция завершена" или "операция не удалась" и подробную ошибку.
дело в том, что если я просто "позволю ему работать", выходное сообщение будет напечатано, но консоль вскоре закроется, не оставив времени для чтения сообщения.
насколько я помню, в C++ каждое консольное приложение заканчивается "нажмите любую клавишу для выхода" или что-то в этом роде. В C# Я могу имитировать это поведение с
Console.ReadKey();
но как я могу это сделать на Java? Я использую класс Scanner, но, учитывая, что "вход" - это мой экземпляр Scanner:
input.next()
System.exit(0);
" любой ключ " будет работать, за исключением возврата, что здесь довольно большое дело. Любой указатели?
8 ответов
Я хотел бы добавить, что обычно вы хотите, чтобы программа ждала, только если она подключена к консоли. В противном случае (например, если это часть трубопровод) нет смысла печатать сообщение или ждать. Для этого вы можете использовать Java Console
такой:
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();
}
}
проблема с вводом консоли Java заключается в том, что он буферизован и требует, чтобы клавиша enter продолжалась.
есть эти два обсуждения: обнаружение и действие на клавишах направления клавиатуры в Java и Java keyboard input parsing в консольном приложении
последний из которых используется JLine чтобы решить его проблему.
Я лично не использовал его.
Я что сказал x4u. Eclipse хотел попробовать поймать блок вокруг него, поэтому я позволил ему генерировать его для меня.
try {
System.in.read();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
вероятно, на нем могут быть всевозможные колокола и свистки, но я думаю, что для новичков, которые хотят, чтобы окно командной строки не выходило из этого, должно быть хорошо.
также я не знаю, насколько это распространено (это мой первый раз, когда я делаю файлы jar), но он не будет работать сам по себе, только через файл bat.
java.exe -jar mylibrary.jar
это bat файл в той же папке. Кажется, проблема установки.
учебник Eclipse пришел из: http://eclipsetutorial.sourceforge.net/index.html
некоторые из ответов также пришли от:Oracle Thread
я использовал простой хак, попросив windows использовать команды cmd и отправить его в 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();
}
этой nextline
довольно хороший вариант, так как он поможет нам запустить следующую строку при нажатии клавиши enter
вы можете просто использовать nextLine();
как пауза
import java.util.Scanner
//
//
Scanner scan=new Scanner();
void Read()
{
System.out.print("Press any key to continue . . . ");
scan.nextLine();
}
однако любая кнопка, которую вы нажимаете, кроме Enter
означает, что вы должны нажать Enter после этого, но я нашел его лучше, чем scan.next();
простой трюк:
импорт java.утиль.Сканер;
/* добавить эти коды в конце вашего метода ...*/
вход сканера = новый сканер (система.в);