Заставить консоль дождаться закрытия ввода пользователя - PullRequest
72 голосов
/ 17 мая 2011

У меня есть консольное приложение, которое после выполнения своих задач должно давать пользователю обратную связь, такую ​​как «операция завершена» или «операция не выполнена» и подробная ошибка.

Дело в том, что если я просто«пусть он запустится», выходное сообщение будет напечатано, но вскоре после этого консоль закроется, и у меня не останется времени на чтение сообщения.

Насколько я помню, в C ++ каждое консольное приложение заканчивается«нажмите любую клавишу для выхода» или что-то в этом роде.В C # я могу смоделировать это поведение с помощью

Console.ReadKey();

Но как я могу сделать это на Java?Я использую класс Scanner, но, учитывая, что «input» - это мой экземпляр Scanner:

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

«Любая клавиша» будет работать, кроме возврата, что здесь довольно важно.Есть указатели?

Ответы [ 8 ]

87 голосов
/ 17 мая 2011

В Java это будет System.in.read()

18 голосов
/ 15 марта 2013

Я хотел бы добавить, что обычно вы хотите, чтобы программа ждала, только если она подключена к консоли. В противном случае (например, если это часть конвейера ), нет смысла печатать сообщение или ждать. Для этого вы можете использовать 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();
    }
}
6 голосов
/ 20 мая 2015

Вы можете просто использовать nextLine(); как паузу

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

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

Однако любая кнопка, которую вы нажимаете, кроме Enter, означает, что вам придется нажимать Enter после этого, но я нашел ее лучше, чем scan.next();

6 голосов
/ 17 мая 2011

Проблема с вводом с консоли Java заключается в том, что это буферизованный ввод, и для продолжения требуется клавиша ввода.

Существует два обсуждения: Обнаружение и воздействие на клавиши направления клавиатуры в Java и Разбор ввода с клавиатуры Java в консольном приложении

Последний из них использовал JLine , чтобы решить свою проблему.

Лично я неиспользовал его.

5 голосов
/ 04 ноября 2012

Я добавил то, что сказал x4u. Eclipse хотел создать блок try catch, поэтому я позволил ему сгенерировать его для меня.

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

4 голосов
/ 12 июня 2016

Я использовал простой хак, попросил Windows использовать команды cmd и отправил его на ноль.

// 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();
    }    
}
2 голосов
/ 18 июня 2016
    public static void main(String args[]) {
        Scanner s=new Scanner(System.in);

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

        s.nextLine();

    }

Этот nextline является довольно хорошим вариантом, поскольку он поможет нам запустить следующую строку при каждом нажатии клавиши ввода

0 голосов
/ 18 июля 2018

Простой трюк:

import java.util.Scanner;  

/* Add these codes at the end of your method ...*/

Scanner input = new Scanner(System.in);
System.out.print("Press Enter to quit...");
input.nextLine();
...