请考虑以下从Eclipse运行的代码段。
即使外部jar文件不存在,也不会抛出异常,process
不为空。 为什么会这样?
try {
Process process = Runtime.getRuntime().exec("java -jar NonExisting.jar");
if (process == null)
System.out.println("process = null");
else
System.out.println(process);
} catch (IOException e) {
System.err.println(e);
}
打印
java.lang.ProcessImpl@1a4d139
如果我从命令行手动运行它,则会出现错误:
C:\Users\workspace\Project\src>java -jar NonExisting.jar
Error: Unable to access jarfile NonExisting.jar
答案 0 :(得分:2)
Process.waitFor()为您提供了生成进程的退出代码,并且可能返回非零(即错误)值。您应该检查此值,并同时收集stdout
/ err
(有关详细信息,请参阅here)。 stderr
可能会报告错误。
您目前所做的只是确认已调用该流程。然后,该进程尝试/无法加载jar文件,并且该文件存在并报告错误。
答案 1 :(得分:1)
创建并完成了该过程。您应该检查Process
对象的返回值。如果创建新进程时出现问题,则会抛出异常,因此您不会遇到异常。
答案 2 :(得分:1)
哇,这太丑了:-)为什么不在新线程中启动jar的Main Methd?那么你应该检查过程的退出状态:
http://en.wikipedia.org/wiki/Exit_status
http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Process.htm
您基本上是在分配流程,因此您无法获得异常或特定于此的任何内容,您需要像处理任何其他特定于操作系统的应用程序一样处理新流程。