2014-11-21 2 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), больше в Oracle учебник - 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: Начните с [* Параллелизм в Swing *] (https://docs.oracle.com/javase/tutorial/uiswing/concurrency/). –