运行不存在的jar不会导致任何异常/错误

时间:2012-12-10 10:57:39

标签: java exception process jar runtime.exec

请考虑以下从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

3 个答案:

答案 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

您基本上是在分配流程,因此您无法获得异常或特定于此的任何内容,您需要像处理任何其他特定于操作系统的应用程序一样处理新流程。