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);
        }
    }

    private  String 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();
    }

一切正常。

你可能感兴趣的:(java,C++,c,C#)