programing

System.console()이 null을 반환합니다.

minimums 2023. 5. 3. 20:54
반응형

System.console()이 null을 반환합니다.

사용하고 있었습니다.readLineBufferedReader사용자로부터 입력/새 암호를 받지만 암호를 마스킹하고 싶어서 사용하려고 합니다.java.io.Console수업. 문제는System.console()돌아온다null응용 프로그램이 Eclipse에서 디버깅되는 경우Java와 Eclipse를 처음 사용하는데 이 방법이 가장 좋은 방법인지 잘 모르겠습니다.소스 파일을 오른쪽 클릭하고 "Debug As" > "Java Application"을 선택합니다.해결 방법이 있습니까?

이것은 일식의 버그 #122429입니다.

이 코드 조각은 유용해야 합니다.

private String readLine(String format, Object... args) throws IOException {
    if (System.console() != null) {
        return System.console().readLine(format, args);
    }
    System.out.print(String.format(format, args));
    BufferedReader reader = new BufferedReader(new InputStreamReader(
            System.in));
    return reader.readLine();
}

private char[] readPassword(String format, Object... args)
        throws IOException {
    if (System.console() != null)
        return System.console().readPassword(format, args);
    return this.readLine(format, args).toCharArray();
}

Eclipse에서 테스트하는 동안 암호 입력이 선명하게 표시됩니다.적어도 테스트는 할 수 있을 것입니다.테스트하는 동안 실제 암호를 입력하지 마십시오.생산용으로 보관합니다 ;).

System.console()콘솔이 없는 경우 null을 반환합니다.

코드에 간접 계층을 추가하거나 외부 콘솔에서 코드를 실행하고 원격 디버거를 연결하여 이 문제를 해결할 수 있습니다.

또한 간단한 명령줄 응용 프로그램을 작성할 때 이 문제가 발생했습니다.

시스템에서 독자적인 BufferedReader 개체를 만드는 다른 방법입니다.in은 java.dll을 사용하는 것입니다.다음과 같은 스캐너:

import java.util.Scanner;

Scanner in;
in = new Scanner(System.in);

String s = in.nextLine();

물론 콘솔을 대신하는 기능은 아니지만 다양한 입력 기능에 액세스할 수 있습니다.

다음은 Oracle의 스캐너에 대한 자세한 문서입니다.

API에 따르면:

"표준 입력출력 스트림을 리디렉션하지 않고 대화형 명령줄에서 가상 시스템을 시작하면 콘솔이 존재하며 일반적으로 가상 시스템이 시작된 키보드디스플레이에 연결됩니다. 백그라운드 작업 스케줄러와 같이 가상 시스템이 자동으로 시작되면 일반적으로 콘솔이 없습니다."

문서에 따르면:

백그라운드 작업 스케줄러와 같이 가상 시스템이 자동으로 시작되는 경우 일반적으로 콘솔이 없습니다.

Netbeans에서 응용 프로그램을 실행할 때 이 오류 메시지가 표시됩니다.다른 답변으로 미루어 볼 때 IDE에서 응용 프로그램을 실행할 때 이러한 현상이 발생하는 것 같습니다.이 질문을 살펴보면 다음과 같습니다.자바의 콘솔에서 읽으려고 하는 이유는

대부분의 IDE는 javaw를 사용합니다.Java 코드를 실행하기 위해 java.exe 대신 exe

솔루션은 다음을 사용하는 것입니다.command line/terminal을 얻기 위해Console.

위에 나온 mixian의 답변을 참고하여 사용하였습니다.요점은 "ojonugwa ochalifu"가 제안한 대로 (검은색) cmd 콘솔을 사용하여 Java 프로그램을 실행하는 것입니다.

**

맞다.

이클립스 외부에서 응용 프로그램을 실행해야 합니다.Eclipse 내의 런처 구성 패널을 보고 별도의 JVM에서 명령을 실행하라는 옵션을 찾을 수 있는지 확인합니다.

Eclipse 실행 구성에서 콘솔 할당 여부를 구성할 수 있습니다. 이 옵션을 선택했는지 확인하십시오.(이클립스를 사용한 지 오래되어 구체적인 지시를 내릴 수 없습니다.)

그래도 작동하지 않으면 이 작업을 수행할 수 있는 작업이 응용 프로그램을 디버그 모드로 시작한 다음 이클립스를 사용하여 프로세스에 연결하는 것입니다.방법을 잘 모를 경우 "이클립스 원격 디버깅"을 검색합니다.

또한 방금 확인한 바와 같이 애플리케이션의 유연성에 매우 큰 영향을 미치기 때문에 일반적으로 콘솔을 할당하도록 요구하는 것은 좋지 않습니다.Java를 호출하는 여러 가지 방법은 콘솔을 할당하지 않으며 이러한 경우 응용 프로그램을 사용할 수 없습니다(나쁜 경우).명령행에 인수를 지정할 수도 있습니다.(콘솔 입력을 특별히 테스트하는 경우에는 충분히 공정하지만, 스크립트나 헤드리스 서버에서 애플리케이션을 호출할 수 있는 경우에는 잠재적으로 유용할 수 있으므로 이러한 유연한 설계가 거의 항상 좋은 아이디어입니다.이는 종종 더 잘 구성된 코드로 이어집니다.)

IDE가 java 대신 java를 사용하는 경우 java는 기본적으로 콘솔 창이 없는 java이기 때문에 이 문제가 발생할 수밖에 없습니다.

클래스를 컴파일하여 터미널에서 실행해 보십시오.그건 효과가 있다.

OSGi 콘솔을 시작하기 위한 프로그램 인수에 콘솔 추가

언급URL : https://stackoverflow.com/questions/4203646/system-console-returns-null

반응형