Заставьте консоль ждать закрытия пользовательского ввода


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

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

Console.ReadKey();

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

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

" любой ключ " будет работать, за исключением возврата, что довольно большое дело здесь. Какие-нибудь указатели?

8 63

8 ответов:

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

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

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

импорт java.утиль.Сканер;

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

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