child.waitFor()执行后返回什么?

时间:2010-08-06 16:20:31

标签: java

    String command = "javac -cp .:../sqljdbc.jar SetHash.java";
   Process child = Runtime.getRuntime().exec(command);
  try{
  c= child.waitFor();
  } catch (Exception ex){ex.printStackTrace();}

...您好 我想知道如果命令成功运行,将在上述结构中将哪个值赋给“c”变量。此外,我想知道如果命令最终出现错误,将分配给“c”的值是否会有任何更改。

2 个答案:

答案 0 :(得分:3)

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6296560开始,如果编译成功(有或没有警告),它将返回0,如果没有,则返回1.

答案 1 :(得分:2)

从浅层意义上讲,分配给c的值是被调用进程的返回值。 Process类本身无法控制它的语义,因为被调用的进程可以返回它想要的任何内容。进程的约定是在成功终止时返回0,并使用非零值来指示错误。

作为jmo points out,如果编译成功,则来自javac的返回值为0,如果不成功则为1(个人,我仍然会测试零和非零,以便将来验证)。因此,您可以测试:

final boolean compilationSucceeded = c ==0;

(另外,c是一个误导性的变量。部分是因为它并不是很明显它意味着什么,在i作为循环计数器正常工作的意义上;还因为按惯例名为c的变量是字符,但这里是int)。