콘솔이 사용자 입력이 닫힐 때까지 기다리도록 만들기


81

작업을 수행 한 후 "작업 완료"또는 "작업 실패"및 자세한 오류와 같은 피드백을 사용자에게 제공해야하는 콘솔 응용 프로그램이 있습니다.

문제는 "실행"만하면 출력 메시지가 인쇄되지만 콘솔은 잠시 후 닫히고 메시지를 읽을 시간이 없습니다.

내가 기억하는 한, C ++에서 모든 콘솔 애플리케이션은 "종료하려면 아무 키나 누르십시오"또는 이와 유사한 것으로 끝납니다. C #에서는이 동작을

Console.ReadKey();

그러나 Java에서 어떻게 할 수 있습니까? 저는 Scanner 클래스를 사용하고 있지만 "input"이 Scanner 인스턴스라는 점을 감안하면 다음과 같습니다.

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

반환을 제외하고는 "모든 키"가 작동합니다. 이것은 여기서 상당히 큰 문제입니다. 포인터가 있습니까?

답변:


102

Java에서 이것은 System.in.read()


17
이것은 Enter 키를 누를 때까지 계속되지 않기 때문에 "종료하려면 Enter를 누르십시오"를 충족하지만 "종료하려면 아무 키나 누르십시오"는 충족하지 않습니다.
— Niall Thomson

"종료하려면 Enter 키를 누르십시오"가 "종료하려면 Enter 키를 제외하고 아무 키나 누르십시오"보다 낫다고 생각합니다. 감사합니다.
— 마코시 치

2
@marcolopes 나는 파티에 조금 늦었지만 앱에 대해 묻기 때문에 사용자가 GUI 또는 앱 내의 다른 곳에서 Enter 키를 누르는 것이 문제라고 생각합니다. 콘솔에서 Enter 키를 눌러야하며 IDE 내에서 실행하는 경우에만 표시됩니다. 앱 내에서 Enter 키를 누르려면 다른 솔루션이 필요합니다.
— Thunderforge 2013 년

4
System.in.read ()는 정확히 1 바이트를 읽지 만 ENTER는 다른 플랫폼에서 1 바이트 이상을 생성 할 수 있습니다. Windows에서는 CRLF를 기억하십시오. 따라서 후속 읽기 호출이 첫 번째 호출의 CRLF에서 LF를 직접 반환하므로 앱이 입력을 전혀 기다리지 않을 수 있습니다.
— Thorsten Schöning 2015

추가 import java.io.IOException;도 필요합니다.
— yu yang Jian

24

일반적으로 콘솔에 연결된 경우에만 프로그램이 기다리기를 원한다고 덧붙이고 싶습니다. 그렇지 않으면 ( 파이프 라인 의 일부인 경우 ) 메시지를 인쇄하거나 대기 할 필요가 없습니다. 이를 위해 다음 Console과 같이 Java를 사용할 수 있습니다 .

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();
    }
}


7

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();


사용해야합니다Scanner scan=new Scanner(System.in);
— ACV

5

나는 간단한 해킹을 사용하여 창에 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();
    }    
}

3

x4u가 말한 내용을 입력했습니다. 이클립스는 주위에 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 에서 나왔습니다.


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

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

    s.nextLine();   
}

이것은 nextlineEnter 키를 누를 때마다 다음 줄을 실행하는 데 도움이되므로 꽤 좋은 옵션입니다.


1

간단한 트릭 :

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();
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.