2014-11-21 62 views
0

這是我認爲會導致問題的一段代碼。讀取InputStream後,JOptionPane.showMessageDialog不顯示。 [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),更在甲骨文教程 - 併發性在Swing – mKorbel 2014-11-21 11:00:16

回答

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 2014-11-21 15:07:33

+0

@essaji:從[* Swing中的併發*]開始(https://docs.oracle.com/javase/tutorial/uiswing/concurrency/)。 – 2014-11-21 16:36:52