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
'source' 카테고리의 다른 글
| 배열이 있는 응답에서 Axios 응답 데이터 가져오기 (0) | 2022.11.22 |
|---|---|
| 변환 VueJ를 사용하여 상태를 변경하시겠습니까? (0) | 2022.11.22 |
| WordPress/WooCommerce에서 느린 쿼리를 코드로 추적하는 방법 (0) | 2022.11.22 |
| Python vs Cpython (0) | 2022.11.22 |
| 여러 CSV 파일을 팬더로 Import하여 하나의 DataFrame으로 연결 (0) | 2022.11.22 |