2012-12-11 3 views
-2

프로그램이 실행 중일 때 (쓰기 파일), 닫기 버튼이 작동하지 않아서 실행 중일 때 멈출 수 없습니다. 왜 그런지 알아? 그리고 그것을 멈출 수 있습니까 (writting 파일 일 때)?프레임의 닫기 버튼이 작동하지 않습니다.

+0

분석 할 수 있도록 코드를 포함 할 수 있습니까? – cworner1

+6

'JFrame # setDefaultCloseOperation'을'DO_NOTHING'으로 설정했거나 블로킹 I/O, 루프 또는 다른 동작이있어 이벤트 디스패치 스레드가 close 이벤트 요청을 처리하지 못하게하는 것과 같은 소리가납니다. * "writting 파일 일 때" * – MadProgrammer

+0

안녕하세요 @ MadProgrammer, 나는 JFrame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE)을 설정했습니다; – TheRealBo

답변

3

더 이상의 증거없이, 나는 당신이 Event Dispatching Thread의 문맥에서 당신의 파일을 쓰고 있다고 생각한다.

이것은 매우 좋지 않습니다. EDT는 창을 닫으라는 요청을 포함하여 발생하는 모든 UI 이벤트를 (다른 것들 사이에서) 처리합니다. 그러나 I/O, 루프, Thread#sleep 또는 다른 차단 작업과 같이 시간이 많이 걸리는 작업으로이 스레드를 차단하면 EDT가 대기열에 누적되는 이벤트를 처리 할 수 ​​없습니다.

이 경우 가장 좋은 방법은 SwingWorker을 사용하여 파일 쓰기를 다른 스레드에로드하는 것입니다. 자세한 내용은 Concurrency in Swing을 확인하십시오.

+0

아, 나중에 확인해 드리겠습니다. 내 코드가 방금 변경되었습니다. EventQueue.invokeLater(new Runnable() { \t \t \t public void run() { \t \t \t \t try { \t \t \t \t \t Test window = new Test(); \t \t \t \t \t window.frame.setVisible(true); \t \t \t \t } catch (Exception e) { \t \t \t \t \t e.printStackTrace(); \t \t \t \t } \t \t \t } \t \t }); TheRealBo

+0

thx @ MadProgrammer, 내 repuatation에 대한 좋은 answer.sorry가 너무 낮은 답변을 통해 투표가 낮은 것 같습니다 – TheRealBo