我正在尝试使用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");
}
}
答案 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中运行它运行正常。