我有一个 jar 的 UI 包装器。当 UI 触发事件“submitButton”时,将调用以下方法来执行它。 jar 在单独的进程中执行,但仅在调用进程(即 UI 服务器)停止后才会发送邮件。知道为什么吗? (从 cmd 行执行时,jar 工作正常)。
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";
}
最佳答案
几个问题:>>
是 shell 重定向。您直接运行子进程,因此它可能被忽略。此外,您从未处理过从进程写入的输出,因此它可能会被缓冲并阻塞进程,直到 UI 结束。
关于Java SendMail 在服务器停止后发送邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17410905/