2011-10-01 6 views
0

파일을 처리하는 클래스를 만들었고 특정 오류가 발생하면 오류 스트림에 관련 오류 메시지를 출력합니다.오류 메시지 스트림에 프로그램 메시지 출력하기

이러한 오류 메시지에 액세스해야하는 다른 클래스에서 작업하고 있습니다. 어떻게해야할지 모르겠습니다. 저는 자바 프로그래밍의 초보자입니다. 내 제한된 지식을 기반으로, 내 두 가지 옵션 중 하나를 첫 번째 클래스의 기본 메서드를 호출 할 것이라고 생각하지만 (이 경우 오류 메시지를 어떻게 얻을지 모르겠) 또는 컴파일 된 클래스 및 액세스를 실행하려면 Process 클래스의 getErrorStream() 메소드를 통한 메시지. 하지만, 시스템이 교착 상태에 빠지거나 exec 명령을 실행하지 않아서 문제가 발생하므로 두 번째 사례를 구현하는 방법을 잘 모릅니다.

답변

0

나는 당신이 여기서 무엇을 묻고 있는지 확실하지 않지만 코드의 잠재적 인 문제는 프로세스의 표준 출력에서 ​​읽지 않는다는 것입니다. Process API에 따르면 "신속하게 실패 ... 하위 프로세스의 출력 스트림을 읽으면 하위 프로세스가 차단되고 심지어 교착 상태가 발생할 수 있습니다." 당신이 언급 한 "문제"입니까?

편집 : 그래, 할 수있는 일을하고 있지만 오류 스트림과 출력 스트림 (내 의견 참조)을 모두 읽으십시오. 또는 직접 main 메서드를 호출 할 수 있습니다. 이 경우 오류 출력은 System.err에 기록됩니다. System.setErr()을 사용하여 작성한 내용을 가져올 수있는 스트림을 설치하지만 자신의 앱에서 오류 출력 (다른 앱을 실행하는 오류 출력)도 여기에 표시된다는 점을 명심하십시오. 당신이 이미하고있는 것처럼, 별도의 프로세스를 생성하는 것이 원하는 것입니다.

+0

오류 일 수 있습니다. 코드의 해당 부분을 실행할 때 프로그램이 멈추지 않고 끝나지 않고 끝없이 계속됩니다. 나는 그것을 어떻게 고칠 지 잘 모르겠다. 가장 기본적인 형태로, 내 질문에 대한 첫 번째 Java 클래스를 실행할 수 있으며 두 번째 Java 클래스에서 해당 오류 스트림 메시지에 액세스 할 수 있습니다. – dpryor

+0

예, 출력 스트림을 소비하지 않을 때의 모습입니다. 코드를 제거했는데 정확히 어떻게 생겼는지는 기억이 나지 않지만 Process.getErrorStream()을 한 번 호출하면 프로세스를 종료 할 때까지 계속 읽었습니다. [Process.getOutputStream()] (http://download.oracle.com/javase/6/docs/api/java/lang/Process.html#getOutputStream%28%29)에서도 같은 작업을 수행해야합니다. 읽은 내용을 무시하더라도 프로세스를 무한정 수행하는 위험이 있습니다. –

+0

내 대답도 업데이트되었습니다. –

0

main 메소드로 많은 작은 프로그램을 기반으로 모듈성을 빌드 할 수 없습니다. 다른 곳에서 호출 할 수 있도록 설계된 클래스로 함수 블록을 만들어야합니다. 즉, System.err에 블로깅하지 않고 상태 정보를 프로그램 방식으로 반환하는 것을 의미합니다. 실제로 오류 인 경우 예외가 발생합니다. 상태를 반환해야하는 경우 상태를 보유 할 데이터 구조를 디자인하고 반환하십시오. 그러나 모든 곳에서 새로운 프로세스를 시작하고 오류 스트림을 읽지 마십시오.