자바 : 콘솔 지우기


답변:


111

Windows에서 작동하지 않는 코드를 보여주는 몇 가지 답변이 있으므로 여기에 설명이 있습니다.

Runtime.getRuntime().exec("cls");

이 명령은 다음 두 가지 이유로 작동 하지 않습니다 .

  1. 잘 알려진 명령 은 Windows의 명령 줄 인터프리터에 내장되어 있으므로을 통해 호출 할 수있는 명명 된 cls.exe또는 cls.com표준 Windows 설치 에는 실행 파일이 없습니다 .Runtime.execcls

  2. 를 통해 새 프로세스를 시작 Runtime.exec하면 표준 출력이 시작 Java 프로세스가 읽을 수있는 파이프로 리디렉션됩니다. 그러나 cls명령 출력 이 리디렉션 될 때 콘솔이 지워지지 않습니다.

이 문제를 해결하려면 명령 줄 인터프리터 ( cmd) /c cls를 호출하고 내장 명령을 호출 할 수 있는 명령 ( ) 을 실행하도록 지시해야 합니다. 또한 출력 채널을 Java 프로세스의 출력 채널에 직접 연결해야합니다.이 채널은 Java 7부터 다음을 사용하여 작동합니다 inheritIO().

import java.io.IOException;

public class CLS {
    public static void main(String... arg) throws IOException, InterruptedException {
        new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();
    }
}

이제 Java 프로세스가 콘솔에 연결되면 (예 : 출력 경로 재 지정없이 명령 행에서 시작된 경우) 콘솔이 지워집니다.


1
왜 이것이 작동하지 않습니까? Windows CMD에서 프로그램을 실행했지만 화면이 지워지지 않았습니다.
— Alist3r

87

다음 코드를 사용하여 명령 행 콘솔을 지울 수 있습니다.

public static void clearScreen() {  
    System.out.print("\033[H\033[2J");  
    System.out.flush();  
}  

자세한 내용은 http://techno-terminal.blogspot.in/2014/12/clear-command-line-console-and-bold.html을 참조하십시오.


2
이것에 전혀 관심이 있습니까? 이 문자열은 무엇이며 자동 플러시가 활성화 된 경우 플러시해야합니까?
— cossacksman

7
그것들은 ANSI 이스케이프 코드 입니다. 특히 화면이 깨끗하고 홈이옵니다 . 그러나 왜 '집'이 필요한가?
— jdurston

2
@jdurston을 생략하면 커서가 창 상단으로 다시 재설정되지 않습니다.
— 휴고 Zink

1
Eclipse에서는 작동하지 않지만 Linux 터미널에서는 작동합니다. 하나의 투표
— Anh Tuan

7
Java가 실행되는 터미널 에뮬레이터가 ANSI 이스케이프 코드를 지원하는 경우에만 작동합니다. 윈도우 NT / XP / 7 / 10분의 8 CMD하지 않습니다
— Thorbjørn Ravn 안데르센에게

19

이것이 내가 처리하는 방법입니다. 이 방법은 Windows OS 및 Linux / Unix OS에서 작동합니다 (Mac OS X에서도 작동 함).

public final static void clearConsole()
{
    try
    {
        final String os = System.getProperty("os.name");

        if (os.contains("Windows"))
        {
            Runtime.getRuntime().exec("cls");
        }
        else
        {
            Runtime.getRuntime().exec("clear");
        }
    }
    catch (final Exception e)
    {
        //  Handle any exceptions.
    }
}

이 방법은 일반적으로 IDE 내부에서 실행중인 경우 콘솔을 지우지 않습니다 .


10
Windows 8.1 :java.io.IOException: Cannot run program "cls": CreateProcess error=2, The system cannot find the file specified
— Ben Leggiero

1
@BenLeggiero 어떤 이유로 PATH 환경 변수의 일부 디렉토리 내에서 JVM이 cls 명령을 찾지 못하면이 오류가 발생합니다. 이 코드는 기본 시스템 구성에 따라 Windows 또는 Unix 시스템 명령을 호출하여 명령 프롬프트 또는 터미널 창을 각각 지우는 것입니다. 터미널 창을 열고 "cls"를 입력 한 다음 Enter 키를 입력하는 것과 정확히 동일해야합니다.
— Dyndrilliac

22
clsWindows 에는 실행 파일 이 없습니다 . 의 내부 명령입니다 cmd.exe.
— a_horse_with_no_name

7
다른 사람들이 말했듯이 Windows에는 cls 실행 파일이 없기 때문에뿐만 아니라 하위 프로세스의 출력이 리디렉션되기 때문에 전혀 작동하지 않습니다 .
— Holger

2
이 답변은 메타에 대한 주제이기도합니다. meta.stackoverflow.com/questions/308950/…
— Petter Friberg

15

이것을 얻는 방법은 여러 줄의 끝 ( "\ n")을 인쇄하고 선명한 화면을 시뮬레이션하는 것입니다. 마지막으로 유닉스 쉘에서 대부분 이전 내용을 제거하지 않고 위로 이동하고 아래로 스크롤하면 이전 내용을 볼 수 있습니다.

다음은 샘플 코드입니다.

for (int i = 0; i < 50; ++i) System.out.println();

13
이를 수행하는 가장 빠른 방법 은 호출 간에 눈에 띄는 지연이 있기 때문에 단일 문자열로 단일 문자열 50 \r\n을 인쇄하는 것 입니다. printlnprintln
— Ben Leggiero

7
콘솔이 얼마나 많은 라인을 표시하도록 구성되어 있는지 어떻게 알 수 있습니까? 대부분의 경우 효과가있을 수 있지만 전부는 아닙니다.
— Cypher

4
이것과 적절한 것의 가장 큰 차이점 clear은 후자의 경우 새로운 출력이 화면의 상단이 아니라 하단의 상단에 있다는 것입니다.
— ndm13

5
System.out.println(new String(new char[50]).replace("\0", "\r\n"));일을 더 빠르고 더 잘할 것입니다.
— Aaron Esau

1
@AaronEsau JDK 11부터 사용할 수 있습니다System.out.println(System.lineSeparator().repeat(50));
— Holger

15

시스템 독립적 인 방법으로이 작업을 수행하려면 JLine 라이브러리 및 ConsoleReader.clearScreen ()을 사용할 수 있습니다 . 현재 환경에서 JLine 및 ANSI가 지원 되는지 여부를 신중하게 확인 하는 것도 좋습니다.

다음 코드와 같은 것이 나를 위해 일했습니다.

import jline.console.ConsoleReader;

public class JLineTest
{
    public static void main(String... args)
    throws Exception
    {
        ConsoleReader r = new ConsoleReader();

        while (true)
        {
            r.println("Good morning");
            r.flush();

            String input = r.readLine("prompt>");

            if ("clear".equals(input))
                r.clearScreen();
            else if ("exit".equals(input))
                return;
            else
                System.out.println("You typed '" + input + "'.");

        }
    }
}

이 명령을 실행할 때 프롬프트에 'clear'를 입력하면 화면이 지워집니다. Eclipse가 아닌 적절한 터미널 / 콘솔에서 실행해야합니다.


14

클래스에서 다음과 같이 메소드를 작성 하십시오 . [ @Holger 가 여기에서 말했듯이 ]

public static void clrscr(){
    //Clears Screen in java
    try {
        if (System.getProperty("os.name").contains("Windows"))
            new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();
        else
            Runtime.getRuntime().exec("clear");
    } catch (IOException | InterruptedException ex) {}
}

이것은 적어도 Windows에서는 작동하지만 지금까지 Linux를 확인하지 않았습니다. 누구나 Linux를 확인하면 작동하는지 알려주세요.

다른 방법 으로이 코드를 작성하는 것입니다 clrscr():

for(int i = 0; i < 80*300; i++) // Default Height of cmd is 300 and Default width is 80
    System.out.print("\b"); // Prints a backspace

이 방법을 사용하지 않는 것이 좋습니다.


1
Windows 10에서 잘 작동합니다!
— gaurav

7

XP. 노트북에서 Runtime.getRuntime (). exec (cls)가 작동하지 않았습니다. 이것은-

for(int clear = 0; clear < 1000; clear++)
  {
     System.out.println("\b") ;
  }

이것이 유용하기를 바랍니다


버퍼 인덱스 위치를 시작하도록 설정할 수 있다면 이것이 가장 쉬운 방법 일 것입니다
— DevilInDisguise

1
프로세스가 중단되면 print.out이 다른 것들보다 먼저 제거되어 지연이 발생한다고 생각합니다.
— TrevorLee

7

다음을 시도하십시오.

System.out.print("\033\143");

이것은 Linux 환경에서 잘 작동합니다


2

Bluej 또는 다른 유사한 소프트웨어에서이 작업을 수행하는 경우 작동합니다.

System.out.print('\u000C');

1

당신의 에뮬레이션을 사용할 수 있습니다 cls로를 for (int i = 0; i < 50; ++i) System.out.println();


2
그냥 힌트일지도 모릅니다. 누군가 화면을 지우고 싶을 수도 있습니다. 실제로
— Sarz

@Sarz : 그리고 실제로 "화면 지우기"는 그 자체로도 의미가 없습니다.
— Gyom

0

제어 문자를 백 슬래시 (\ b) 및 캐리지 리턴 (\ r)으로 사용해야합니다. 기본적으로 비활성화되어 있지만 콘솔보기에서 이러한 컨트롤을 해석 할 수 있습니다.

Windows> 환경 설정 및 실행 / 디버그> 콘솔 에서 ASCII 제어 문자 해석을 선택 하여 사용으로 설정하십시오.

Eclipse의 콘솔 환경 설정

이러한 구성 후에는 다음과 같은 제어 문자로 콘솔을 관리 할 수 ​​있습니다.

\ t-탭.

\ b-백 스페이스 (텍스트에서 한 단계 뒤로 이동하거나 단일 문자 삭제).

\ n-줄 바꿈.

\ r-캐리지 리턴 ()

\ f-양식 피드.

이클립스 콘솔 클리어 애니메이션

자세한 정보 : https://www.eclipse.org/eclipse/news/4.14/platform.php


-2

JNI를 사용해야합니다.

우선 Visual Studio를 사용하여 호출 시스템 ( "cls")을 사용하여 .dll을 만듭니다. 그런 다음 JNI를 사용하여이 DDL을 사용하십시오.

이 기사가 훌륭하다는 것을 알았습니다.

http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=5170&lngWId=2


그것은 나에게 일이다. JNI를 사용하여 JAVA에서 화면을 지우는 실제 프로젝트가 있습니다.
— 데니

헝가리에서는 "그가 메이스로 파리를 쳤다"고 말합니다.
— Ambrus Tóth
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.