Заставьте консоль ждать закрытия пользовательского ввода
у меня есть консольное приложение, которое после выполнения своих задач должно давать обратную связь пользователю, например "операция завершена" или "операция не удалась" и подробную ошибку.
дело в том, что если я просто "позволю ему работать", выходное сообщение будет напечатано, но консоль вскоре закроется, не оставив времени для чтения сообщения.
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 заключается в том, что он буферизован и требует ввода ключа для продолжения.
есть эти два обсуждения: обнаружение и действие на клавишах направления клавиатуры в Java и синтаксический анализ ввода с клавиатуры Java в консольном приложении
последний из которых используется 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();