source

java.io 를 참조해 주세요.Eclipse IDE의 콘솔 지원

bestscript 2022. 11. 22. 09:32

java.io 를 참조해 주세요.Eclipse IDE의 콘솔 지원

이클립스 IDE를 사용하여 Java 프로젝트를 개발, 컴파일 및 실행합니다.VIP를 java.io.Console이치노

는 제는 the the the the the the the the theSystem.console()null아닌 백그라운드 로 프로그램을 실행합니다.Eclipse는 익숙한 콘솔 창에서 최상위 프로세스가 아닌 백그라운드 프로세스로 프로그램을 실행합니다.

Eclipse가 프로그램을 최상위 프로세스로 실행하도록 강제하거나 최소한 JVM이 인식할 수 있는 콘솔을 만들 수 있는 방법이 있습니까?그렇지 않으면 프로젝트를 중단하고 Eclipse 외부의 명령줄 환경에서 실행할 수밖에 없습니다.

Eclipse의 스텝스루 디버깅을 사용하고 싶다고 생각합니다.JRE 클래스 경로의 bin 디렉토리에 빌드된 클래스를 설정하면 클래스를 외부에서 실행할 수 있습니다.

java -cp workspace\p1\bin;workspace\p2\bin foo.Main

원격 디버거를 사용하여 프로젝트에 내장된 클래스 파일을 사용하여 디버깅할 수 있습니다.

이 예에서 Eclipse 프로젝트 구조는 다음과 같습니다.

workspace\project\
                 \.classpath
                 \.project
                 \debug.bat
                 \bin\Main.class
                 \src\Main.java

1. JVM 콘솔을 디버깅모드로 기동하다

debug.bat cmd에서 외부에서 실행해야 하는 Windows 배치 파일입니다.exe 콘솔

@ECHO OFF
SET A_PORT=8787
SET A_DBG=-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=%A_PORT%,server=y,suspend=y
java.exe %A_DBG% -cp .\bin Main

인수에서는 디버깅포트는 8787로 설정되어 있습니다.suspend=y 인수는 JVM에 디버거가 연결될 때까지 기다리도록 지시합니다.

2. 디버깅 기동 설정 작성

Eclipse에서 [Debug]대화상자([Run]> [ Open Debug Dialog ...])를 열고 다음 설정으로 새 원격 Java 응용 프로그램 설정을 만듭니다.

  • 프로젝트: 프로젝트명
  • 연결 유형: 표준 (소켓 설치)
  • 호스트: localhost
  • 포트: 8787

3. 디버깅

따라서 앱을 디버깅하고 싶을 때 언제든지 해야 할 일은 다음과 같습니다.

  • 중단점을 정하다
  • 콘솔에서 배치 파일 실행
  • 디버깅 컨피규레이션을 기동하다

이 문제는 버그 122429에서 추적할 수 있습니다.여기서 설명하는 대로 추상화 계층을 사용하여 응용 프로그램에서 이 문제를 해결할 수 있습니다.

제가 사용하는 회피책은 시스템만 사용하는 것입니다.인/시스템이클립스를 사용할 때 콘솔 대신 out을 선택합니다.예를 들어 다음과 같습니다.

String line = System.console().readLine();

다음을 사용할 수 있습니다.

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String line = bufferedReader.readLine();

이 현상이 발생하는 이유는 이클립스가 시스템 콘솔에서 최상위 프로세스가 아닌 백그라운드 프로세스로 앱을 실행하기 때문입니다.

직접 클래스를 구현할 수 있습니다.다음은 예를 제시하겠습니다.

public class Console {
    BufferedReader br;
    PrintStream ps;

    public Console(){
        br = new BufferedReader(new InputStreamReader(System.in));
        ps = System.out;
    }

    public String readLine(String out){
        ps.format(out);
        try{
            return br.readLine();
        }catch(IOException e)
        {
            return null;
        }
    }
    public PrintStream format(String format, Object...objects){
        return ps.format(format, objects);
    }
}

http://www.stupidjavatricks.com/?p=43에서 이 문제를 발견했습니다.

또한 콘솔이 최종적이기 때문에 system.in 및 시스템에 대한 래퍼를 작성하기 위해 콘솔을 확장할 수 없습니다.그것도 마찬가지야.일식 콘솔 안에서도 여전히 액세스할 수 있습니다.그래서 이클립스가 아직 이걸 콘솔에 꽂지 않은 거겠지

setter가 없는 System.console 이외의 콘솔을 취득하는 방법을 원하지 않는 이유는 이해하지만, 왜 다른 사용자가 클래스를 덮어쓰고 모의/테스트 콘솔을 만들지 않는지는 이해할 수 없습니다.

다른 옵션은 두 옵션을 모두 정리하는 메서드를 만들고 콘솔을 사용할 수 없을 때 System.in 메서드로 "페일오버"하는 것입니다.다음 예는 매우 기본적인 것입니다.필요에 따라 콘솔(readPassword, format)에서 다른 메서드를 정리할 수 있습니다.이렇게 하면 Eclipse에서 원활하게 실행할 수 있으며, 도입 시 콘솔 기능(패스워드 숨기기 등)을 이용할 수 있습니다.

    private static String readLine(String prompt) {
        String line = null;
        Console c = System.console();
        if (c != null) {
             line = c.readLine(prompt);
        } else {
            System.out.print(prompt);
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
            try {
                 line = bufferedReader.readLine();
            } catch (IOException e) { 
                //Ignore    
            }
        }
        return line;
    }

내가 알기로는 이클립스에서 콘솔 개체를 가져올 방법은 없습니다.콘솔이 != null인지 확인한 다음 JAR을 실행하여 명령줄에서 실행할 수 있습니다.

java.io을 구할 방법은 없는 것 같습니다.이클립스를 통해 응용 프로그램을 실행할 때 콘솔 개체입니다.명령줄 콘솔 창은 백그라운드 프로세스(Eclipse?로 백그라운드)로 실행되므로 응용 프로그램에서 열리지 않습니다.현재 이 문제를 해결할 Eclipse 플러그인은 없습니다.주로 java.io이 원인입니다.콘솔은 최종 클래스입니다.

실제로 할 수 있는 것은 반환된 콘솔오브젝트의 늘을 테스트하고 거기에서 넘어가는 것뿐입니다.

링크는 System.console()을 사용하는 대신 사용할 수 있습니다.하나는 System.in로 둘러싸인 Buffered Reader를 사용하는 것이고, 다른 하나는 System.in로 둘러싸인 스캐너를 사용하는 것입니다.

둘 다 콘솔만큼 간결하지는 않지만, 둘 다 디버깅의 어리석음에 의존하지 않고 일식으로 작동합니다.

예를 들어 Eclipse 워크스페이스가 C:\MyWorkspace이고 maven 프로젝트 MyProject 내에 Java 어플리케이션을 만들고 Java 메인클래스는 com.mydomain.mypackage라고 합니다.마이클래스

이 경우 를 사용하여 메인클래스를 실행할 수 있습니다.System.console()명령줄에서 다음을 수행합니다.

java -cp C:\MyWorkspace\MyProject\target\classes com.mydomain.mypackage.MyClass

NB1: maven 프로젝트에 없는 경우 project properties | Java Build Path | Source에서 출력 폴더를 확인합니다."target/classes"가 아닐 수 있습니다.

NB2: maven 프로젝트이지만 클래스가 src/test/java일 경우 target\classes 대신 target\test-classes를 사용해야 합니다.

언급URL : https://stackoverflow.com/questions/104254/java-io-console-support-in-eclipse-ide