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

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

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

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

Console.ReadKey();

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

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

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



답변

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


답변

일반적으로 콘솔에 연결된 경우에만 프로그램이 기다리기를 원한다고 덧붙이고 싶습니다. 그렇지 않으면 ( 파이프 라인 의 일부인 경우 ) 메시지를 인쇄하거나 대기 할 필요가 없습니다. 이를 위해 다음 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();
    }
}


답변

Java 콘솔 입력의 문제점은 버퍼링 된 입력이며 계속하려면 Enter 키가 필요하다는 것입니다.

다음 두 가지 논의가 있습니다.
콘솔 앱에서 Java 키보드 입력 구문 분석Java 에서 키보드 방향 키 감지 및 작동

후자는 JLine 을 사용 하여 문제를 해결했습니다.

개인적으로 사용하지 않았습니다.


답변

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


답변

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


답변

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 에서 나왔습니다.


답변

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

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

    s.nextLine();
}

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