p.waitfor()永远等待

时间:2012-02-01 19:59:46

标签: java

我正在尝试使用java程序运行命令,但是p.waitfor()函数会永远等待。代码有什么问题?

import java.io.*;

public class doscmd
{
  public static void main(String args[]) throws InterruptedException
  {
    try
    {
      Process p=Runtime.getRuntime().exec("cmd /c dir");
      p.waitFor();
      BufferedReader reader=new BufferedReader(new InputStreamReader(p.getInputStream()));
      String line=reader.readLine();
      while(line!=null)
      {
        System.out.println(line);
        line=reader.readLine();
      }
    } 
    catch(IOException e1) {}


    System.out.println("Done");
  }
}

3 个答案:

答案 0 :(得分:5)

目录是否很大?也许p填满了它的输出缓冲区并停止等待读者消费,所以它可以完成写出目录列表。

你应该移动

p.waitFor();

到方法的最后。

答案 1 :(得分:1)

在调用waitFor()之前,您必须访问InputStream和ErrorStream。你应该看一下question,了解它的工作原理。

答案 2 :(得分:1)

您的目录结构太大。将p.waitfor()移至

Process p=Runtime.getRuntime().exec("cmd /c dir");
BufferedReader reader=new BufferedReader(new InputStreamReader(p.getInputStream()));
String line=reader.readLine();
while(line!=null)
{
System.out.println(line);
line=reader.readLine();
}
p.waitFor();

我尝试在C:\ programfiles中运行它运行正常。