2012-12-09 2 views
0

방법이 있습니까?Java에서 프로그램 종료시 예외 잡기

저는 매우 오랜 시간 동안 반복해야하는 프로그램을 코딩하고 있습니다. 그렇게하는 동안 파일에 쓰는 것으로되어 있습니다. 프로그램을 수동으로 종료하고 스트림을 닫으면 스트림이 닫히기 때문에 데이터가 손실 될 위험이 없습니다. 예외 처리와 함께이 작업을 수행하는 방법이 있어야하지만 확실하지 않습니다. 모든 종류의 제안은 매우 감사드립니다!

주에 당신에게

+1

사용하여 스트림이'finally' 블록에 폐쇄 시도 - finally 절에 대한 여러분 모두 감사합니다. 또는 Java 7을 사용하는 경우 [try-with-resources 블록] (http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html)을 사용하십시오. – Vulcan

답변

0

나는 길을 찾았습니다! 프로그램이 종료 될 때 스트림이 자동으로 닫히는 것을 보지 않고 나는 많은 시간을 보냈다. ...

write() 메소드 다음에 flush() 메소드를 사용하지 않았기 때문에 데이터가 쓰여지지 않았다. 같은 :

out.write(line); 
out.flush(); 

당신의 도움이

+1

귀하의 질문에 대한 답변이 아닙니다. 더 이상 필요 없으면 파일을 닫으십시오. out.close() – AlexWien

2

감사합니다 CLOSEALL에서

try { 
    startapp(); 
} finally { 
    closeAll(); 
} 

() 당신은 예외 ocure 할 경우에도 finally 블록의 코드가 실행됩니다 안전한 종료 을 위해해야 ​​할 일.

+0

그것은 작동하지 않았다 ...하지만 나가 출구를 발견, 나는 몇 초 안에 게시 할 것입니다 – rsy

+0

이 작품! System.exit()를 호출 할 때만 당신이하지 않는 것을 수행하면 작동하지 않을 것입니다. 또는 VM이 ​​내부 오류 – AlexWien

1

프로그램 실행을 제어하기 위해 예외를 사용하면 설명하는 방법이 좋지 않습니다. 셧다운 훅을 사용하는 것이 훨씬 낫습니다.

Runtime.getRuntime().addShutdownHook(new Thread() { 
    @Override 
    public void run() { 
     // Close streams here 
    } 
}); 

이 하드 정지 (SIGKILL)의 경우에 종료 훅이 실행되도록 보장되지 않습니다 있지만, 잘 대부분의 정상 종료를 처리합니다. 그러나 그것은 finally 블록을 통해 스트림을 닫으려고 시도하는 것보다 나쁘지 않습니다.

+0

과 충돌 할 때 테스트 해 보았지만 컴파일 할 수 없었습니다 ... 여전히 문제가 발견되었습니다. – rsy

+0

위의 코드는 컴파일되고 작동합니다. 어떤 문제에 빠졌습니까? – Perception