pickerel 发表于 2013-1-27 05:36:51

java中用Process执行外部命令挂起问题的解决办法

我要在Java中调一个外部命令,于是写了以下代码
Process p = Runtime.getRuntime().exec("my command ...");int c = p.waitFor();if (c != 0){    System.out.prinln("处理失败");    BufferedReader br = new BufferedReader(new InputStreamReader(p.getErrorStream()));    for (String line = br.readLine(); line != null; line = br.readLine())    {      System.out.println(line);    }    }   

当执行的外部命令没有任何输出的时候,这段代码运行正常,但如果执行的外部命令有输出的时候,这段程序就会挂起,估计是因为流没有被读取导致了堵塞,于是把代码改为
    public void test() throws IOException, InterruptedException    {      Process p = Runtime.getRuntime().exec("command...");      String errorMsg = readInputStream(p.getErrorStream());      String outputMsg = readInputStream(p.getInputStream());      int c = p.waitFor();      if (c != 0)      {            System.out.println("处理失败:" + errorMsg);      }else      {//print command output            System.out.println(outputMsg);      }    }    privateString readInputStream(InputStream is) throws IOException    {      BufferedReader br = new BufferedReader(new InputStreamReader(is));      StringBuffer lines = new StringBuffer();      for (String line = br.readLine(); line != null; line = br.readLine())      {            lines.append(line);      }      return lines.toString();    }
一切正常。
页: [1]
查看完整版本: java中用Process执行外部命令挂起问题的解决办法