2014-11-21 3 views
0

다음은 문제의 원인이라고 생각되는 코드 조각입니다.JOptionPane.showMessageDialog가 InputStream를 읽은 후에 표시되지 않습니다. [Java]

while((is.read(bytes)) != -1) 
      { 
       fos.write(bytes); 
      }  

      JOptionPane.showMessageDialog(null,"File Received.","Complete.",JOptionPane.INFORMATION_MESSAGE); 
      //System.out.println("File Received."); 

이제 JOptionPane 문에 컨트롤이 나타나면 아무 것도 나타나지 않고 프로그램이 종료되지 않습니다. 수동으로 작업 관리자에서 끝내야했습니다. JOptionPane 문을 주석 처리하고 콘솔 메소드 즉 System.out.println()을 사용하여 메시지가 제대로 표시되고 프로그램이 정상적으로 종료되었습니다. 왜이 JOptionPane이이 문제를 일으키는 지 이해할 수 없습니다. 나는 여기 붙어있다. 도움을 주시면 감사하겠습니다. 기대해 줘서 고마워.

+2

[이벤트 처리 쓰레드 (http://stackoverflow.com/a/12643642/714968), 더 오라클 튜토리얼 - Concurency 스윙에 – mKorbel

답변

1

당신이 완료되면 스트림 close해야합니다. 그것은 효과가있다. fos.close()이 실행되면 EDT에 알리고 메시지가 표시됩니다. System.out.print의 경우 EDT에 없으므로 write 작업이 완료되면 인쇄됩니다.

while((is.read(bytes)) != -1) 
      { 
       fos.write(bytes); 
      }  
      fos.close(); 
      JOptionPane.showMessageDialog(null,"File Received.","Complete.",JOptionPane.INFORMATION_MESSAGE); 
      //System.out.println("File Received."); 
+0

덕분에이 일을하는 사람 (남자). EDT가 무엇인지 알거나 나에게 자습서에 대한 링크를 제공 할 수 있습니까? 기대해 줘서 고마워. – essaji

+0

@essaji : [* Concurrency in Swing *] (https://docs.oracle.com/javase/tutorial/uiswing/concurrency/)부터 시작하십시오. –