System.console()이 null을 반환합니다.
사용하고 있었습니다.readLine의BufferedReader사용자로부터 입력/새 암호를 받지만 암호를 마스킹하고 싶어서 사용하려고 합니다.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
'programing' 카테고리의 다른 글
| Excel VBA를 사용하여 워크북에서 모든 일치 항목 찾기 (0) | 2023.05.08 |
|---|---|
| 파이썬을 컴파일하는 동안 --enable-optimization은 무엇을 합니까? (0) | 2023.05.08 |
| ALTER TABLE, null이 아닌 열에 null 설정, PostgreSQL 9.1 (0) | 2023.05.03 |
| AV Foundation, 연결에서 비동기적으로 스틸 이미지를 캡처할 때 셔터 소리를 끄는 방법은 무엇입니까? (0) | 2023.05.03 |
| 오류: 지원되지 않는 형식 또는 손상된 파일: BOF 레코드가 필요합니다. (0) | 2023.05.03 |
