2013-07-01 8 views
0

У меня есть обертка UI для банки. Когда событие «submitButton» запускается из пользовательского интерфейса, вызывается следующий метод для его выполнения. Банкомат выполняется в отдельном процессе, но почта отправляется только после остановки процесса вызова (то есть сервера пользовательского интерфейса). Любая идея почему? (Ящик работает отлично, когда выполняется из строки cmd).Java SendMail отправляет почту после остановки сервера

public static String doSendMail(){ 
     // Run a java app in a separate system process 
     Process process; 
     try { 
      ProcessBuilder pb = new ProcessBuilder("java", "-jar", "SendMail.jar", ">>", "test.log"); 
      process = pb.start(); 
      InputStream in = process.getInputStream(); 
      InputStream err = process.getErrorStream(); 

     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return "Success"; 

    } 
+1

Пара проблем: '>>' - перенаправление оболочки. Вы выполняете подпроцесс напрямую, поэтому его, вероятно, проигнорировали. Кроме того, вы никогда не обрабатывали вывод, записанный в процессе, поэтому он, вероятно, получил буферизацию и заблокировал процесс до тех пор, пока пользовательский интерфейс не завершится. –

+0

Так оно и было, после выхода из процесса, письма были отправлены сразу, спасибо большое! – user379151

+0

Поскольку он решил вашу проблему, я отправил свой комментарий в качестве ответа. –

ответ

1

Несколько проблем: >> является перенаправление оболочки. Вы выполняете подпроцесс напрямую, поэтому его, вероятно, проигнорировали. Кроме того, вы никогда не обрабатывали вывод, записанный в процессе, поэтому он, вероятно, получил буферизацию и заблокировал процесс до тех пор, пока пользовательский интерфейс не завершится.

Смежные вопросы