2011-08-18 8 views
52

이것은 초보자 용 질문 일지 모르지만 나를 도울 수 있기를 바랍니다. :) 내가 이런 걸 가지고 내가 넷빈즈 IDE를 사용하고Java에서 e.printStackTrace() 사용

try 
{ 
//try to do something there 
} 
catch (IOException e) 
{ 
//handle the exception 
e.printStackTrace(); 
} 

어떤 이유로의 printStackTrace가 구불 구불 한 라인에 밑줄이 그어집니다. Alt + Enter를 누르면 Throwable.printStackTrace()가 제거되어야한다고 표시됩니다. 이것은 무엇을 의미 하는가? 누구가 더 많은 통찰력을 줄 수 있을까요? 아니면 이것을 무시할 수 있습니까?

감사합니다.

답변

20

그냥 권장 사항입니다. 이클립스에서 괜찮아요 - 난 그냥 다른 IDE의 답변처럼 그것을하고 더 일반적인 방법이 있다는 것을 당신에게 말하는 IDE라고 믿습니다. 디버깅에 유용하며 치명적인 오류가 발생할 때 사용자에게 알려서 디버그 모드 (예 : 콘솔 스위치 -d)를 사용하여 이러한 로그를 수집해야합니다.

+0

log4j와 같은 로깅 프레임 워크를 사용하는 것이 더 좋은 방법 중 하나입니다. – svarog

36

시도 : 그냥 콘솔에서 스택을 덤프로 printStackTrace() 정말만큼 오류를 처리하지 못하기 때문에

e.printStackTrace(System.out); 
+0

아, 감사 @Pablo 일했다! 미친, 왜 이것이 경고를 정확히 사라지게할까요? 'System.out'을 매개 변수로 지정하지 않고 공백으로두면 JVM이 '디버그 모드 명령을 가정하고 콘솔에만 출력합니까? –

+6

해킹! 이것은 넷빈이 그것을 보여주는 것을 멈추는만큼 실제로 문제를 해결하지는 못합니다. 이것은 여전히 ​​기본 오류 스트림으로 출력됩니다. – ThePerson

+0

@ The Person'System.err'는'System.out'이 아닌 디폴트 에러 스트림으로 출력합니다. 'System.out'은 기본 출력 스트림을 나타냅니다. – cst1992

14

그것은 아마. 적절한 오류 처리 (필요하다면)로 대체하고 출력을 일종의 로거로 바꿀 때까지 자리 표시 자 역할을합니다.

9

e.printStackTrace();

대부분의 경우 콘솔 인 기본 ErrorStream에 인쇄되기 때문에 좋지 않습니다.

NetBeans에서 경고해야합니다. 그것에 대한 좋은 습관은 메시지를 기록하는 것입니다. 같은 기준을 따르

http://onjava.com/pub/a/onjava/2003/11/19/exceptions.html

편집 더 많은 정보에 울부 짖는 첫 코멘트를 참조하십시오.

+6

아니요. 별도의 스트림 인 별칭 FileDescriptor 인 기본 Errorstream으로 인쇄되고 별도의 파일로 파이프 될 수 있습니다. java YourClass 1> file.out 2> file.err' - e.printStackTrace가 ' file.err '가 아니라'file.out '입니다. –

+2

항상 좋은 연습은 아닙니다. 이 콘솔은 사용자가 액세스 할 수없는 웹 서버의 콘솔 일 수 있습니다. 때때로이 스택 추적을 응용 프로그램의 현재 로그, 특히 웹 응용 프로그램에도 덤프하는 것이 더 좋습니다. –

1

스택 추적만으로는 충분하지 않습니다. 예외 스택 추적 자체를 인쇄한다고해서 완전히 나쁜 습관 일 수는 없지만 예외 발생시 스택 추적 만 인쇄하는 것은 문제가됩니다.

항상 예외를 기록하고 (우수 logging framework 사용) 최종 사용자에게 공개하지 마십시오. 그리고 개발 모드에서만 스택 트레이스를 보여 주도록하십시오.

나 자신을 사용 (대부분의 시간)에 logger.log(Level.SEVERE, <exception>.getMessage(), <exception>);.

넷빈즈이 클릭하면 예외 'Surround Statement with try-catch'을 처리하기 위해 당신을 제안 할 때, 그것은 생성) :

ex.printStackTrace();보다 더
try { 
    //something need to be handle(exception that throw) 
} catch (SQLException ex) { 
    Logger.getLogger(ClassName.class.getName()).log(Level.SEVERE, null, ex); 
} 

.

이 도움이 될 수 있습니다 :

0
e.printStackTrace(System.err); 

관련 문제