2012-02-01 661 views
3

我想用java程序运行命令,但是p.waitfor()函数会一直等待。代码有什么问题?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

该程序似乎没有'waitFor()'工作正常。你为什么需要它? – 2012-02-01 20:03:54

回答

5

该目录很大?也许p填满了它的输出缓冲区,并等待读者消费一些东西,这样就可以完成写出目录列表。

你或许应该移动

p.waitFor(); 

的方法结束。

1

在调用waitFor()之前,您必须访问您的InputStream和ErrorStream。你也应该看看question了解更多关于它是如何工作的细节。

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工作正常运行。

相关问题