Подтвердить что ты не робот

Заставьте консоль ждать ввода пользователем, чтобы закрыть

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

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

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

Console.ReadKey();

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

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

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

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

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

Ответ 4

Я добавил, что сказал 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

Ответ 5

Я использовал простой хак, попросив окна использовать команды 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();
    }    
}

Ответ 6

Вы можете просто использовать 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();

Ответ 7

    public static void main(String args[]) {
        Scanner s=new Scanner(System.in);

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

        s.nextLine();

    }

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

Ответ 8

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

import java.util.Scanner;

/* Добавьте эти коды в конце вашего метода... */

Вход сканера = новый сканер (System.in);

System.out.print("Нажмите Enter, чтобы выйти...");

input.nextLine();