问题描述
我试图打开Outlook eml文件,并等待用户何时关闭eml窗口。 我使用以下代码:
ProcessBuilder pb = new ProcessBuilder();
pb.command("cmd.exe","/C","start","/wait","outlook.exe","/eml","C:/test.eml");
p = pb.start();
try {
if(p != null) {
p.waitFor();
}
} catch(Exception e) {
logger.log(Level.INFO,"Got an exception.",e);
throw e;
} finally {
logger.info("closing process...");
}
但是直到我关闭eml窗口才等... 在此之前打印“关闭过程中...”。
我该怎么办?
ProcessBuilder pb = new ProcessBuilder("outlook.exe","email5704371022351125516.eml");
Process p = pb.start();
p.waitFor();
System.out.println("Closing process...");
解决方法
尽管您可能需要完全限定Outlook的路径名,但您不必启动CMD即可启动Outlook:
ProcessBuilder pb = new ProcessBuilder("outlook.exe","/eml","C:\\test.eml");
Process p = pb.start();
p.waitFor();
logger.info("Closing process...");
此外,也无需检查p!=null
,因为start()
会引发异常或返回进程句柄。