java.io.콘솔에서 지원 Eclipse IDE
문제
내가 사용하여 Eclipse IDE 을 개발하고,컴파일과 실행 Java 프로젝트입니다.오늘같이 사용하는 java.io.Console
클래스를 관리하는 출력하고,더 중요한 것은,사용자 입력이 있습니다.
문제는 System.console()
환 null
응용 프로그램이 실행되면"을 통해"Eclipse.Eclipse 프로그램을 실행에서 백그라운드 프로세스보다 최고 수준의 프로세스 콘솔 창 우리에 익숙합니다.
는 방법이 있을 강제로 이클립스를 실행하는 프로그램으로 최고 수준의 과정,또는 적어도 만드는 콘솔에서 JVM 인식?그렇지 않으면 나는 강제 병합적인 프로젝트에서 실행하는 명령줄 환경 외부 Eclipse.
해결책
나는 가정을 원용할 수 있는 단계를 통해서 디버깅 Eclipse.실행할 수 있습니다 그냥 클래스 외부에서 설정하여 내장 클래스의 bin 디렉토리에 JRE 클래스 경로.
java -cp workspace\p1\bin;workspace\p2\bin foo.Main
디버깅할 수 있습니다 원격 사용하는 디버거와 이용 클래스 파일에 내장 된 프로젝트입니다.
이 예제에서는 일식 프로젝트 구조는 다음과 같습니다.
workspace\project\
\.classpath
\.project
\debug.bat
\bin\Main.class
\src\Main.java
1.시작하면 콘솔에서 JVM 디버깅 모드
디버그.bat 윈도우는 배치 파일을 실행해야 한다 외부에서 cmd.exe console.
@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.이 일시 중단=y 인수를 알려줍니다 JVM 때까지 기다릴 디버거를 연결.
2.을 만들 디버그 시작 구성
Eclipse 에서 열린 디버그 대화 상자(실행>열어 디버그 대화)및 새로 생성 원격 Java 응용 프로그램 구성은 다음과 같은 설정:
- 프로젝트: 프로젝트 이름
- 연결 유형: 준(소켓 연결)
- Host: localhost
- 포트: 8787
3.디버깅
그래서,당신이해야 할 모든 당신이 원하는 모든 시간을 디버깅하는 응용 프로그램은 다음과 같습니다
- 브레이크 포인트를 설정
- 을 실행하는 배치 파일에서 콘솔
- 시작 디버 구성
을 추적할 수 있습니다 이 문제에 버그 122429.작업할 수 있습니다 라운드 이 문제에의 응용 프로그램을 사용하여 추상화 계층을 설명 기.
다른 팁
이는 해결 방법을 사용하는 사용하는 시스템입니다.서/시스템입니다.대한의 콘솔을 사용할 때 Eclipse.예를 들어,대신:
String line = System.console().readLine();
당신이 사용할 수 있습니다:
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String line = bufferedReader.readLine();
이유가 발생하기 때문에 이클립스를 실행하는 앱을 배경으로 처리되지 않고 최고 수준의 프로세스와 시스템 console.
을 구현할 수 있습니다 클래스는 자신입니다.예는 다음과 같습니다:
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 .
슬프게도,이후 콘솔은 최종적이,당신은 확장 할 수 없습을 만드는 래퍼 시스템입니다.에서 및 시스템입니다.는 않습니다.도 안 eclipse 콘솔하게 이용할 수 있습니다.일 eclipse 지 않은 연결이로 콘솔 아직...
나는 이유를 이해하고 싶지 않을텐데 다른 어떤 방법 콘솔에 다른 것보다 시스템입니다.콘솔,이 없는 세터,그러나지 않고 싶지 않은 사람을 재정의할 수 있는 클래스를 모의 시험 콘솔...
또 다른 옵션은 방법을 만들 수 있을 감싸는 두 가지 옵션을,그리고"fail"이상하는 시스템입니다.에서 방법을 때 콘솔을 사용할 수 없습니다.아래 예에서는 매우 기본적인할 수도 있습 따라 동일한 과정을 마무리 다른 방법 콘솔(readPassword,형식)으로 필요합니다.는 방법을 실행할 수 있습니다 그것은 행복하게 Eclipse&때의 배포를 얻 콘솔 기능(예를들면비밀번호 숨기)kicking in.
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;
}
멀리로 말할 수 있는 방법은 없을 얻는 콘솔에서 개체 Eclipse.나는 그냥 있는지 확인 콘솔!= null,다음 항아리고 그것을 실행하는 명령줄에서.
이 없는 것 같을 얻을 수있는 방법 java.io.콘솔에 객체를 실행하는 경우 응용 프로그램을 통해 Eclipse.명령줄 콘솔창이 열리지 않으로 응용 프로그램은 백그라운드 프로세스로 실행(배경을 Eclipse?).현재는 없는 이클립스 플러그인 이 문제를 처리하기 위해,사실 때문에 주로는 java.io.콘솔 최종 클래스입니다.
당신이 정말로 할 수있는 모든 테스트는 반환되는 콘솔에 대한 개체 null 진행합니다.
이 링크 제공하는 대안을 사용하는 시스템입니다.콘솔().중 하나를 사용하는 것입 BufferedReader 감싸 시스템입니다.에서 두 번째는 사용하의 스캐너 감싸 시스템입니다.습니다.
어느 쪽도 아니는 간결한 콘솔,하지만 모두에서 작업 eclipse 하지 않고도 리조트의 디버깅하는 어리석음!
말 Eclipse 작업 영역 C:\MyWorkspace, 를 만들 java 응용 프로그램 안에 maven 하위 프로젝트, 과 Java 기본 클래스입니다 com.mydomain.mypackage.MyClass.
이 경우에는 실행할 수 있습니다 당신의 주요 클래스를 사용하는 System.console()
에서 명령 라인:
java -cp C:\MyWorkspace\MyProject\target\classes com.mydomain.mypackage.MyClass
NB1:지 않는 경우에 maven 프로젝트를 확인 출력 폴더에서 프로젝트 속성|Java 구축 경로|소스입니다.되지 않을 수도 있습니다"target/클래스"
NB2:는 경우 그것은 maven 프로젝트,하지만 당신의 클래스에서는 src/시험/java,당신은 가능성이 있을 사용하"대상\테스트 수업"대신에"대상\classes"