2012-02-01 9 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()'なしで正常に動作しているようです。なぜあなたはそれが必要なのですか? –

答えて

5

ディレクトリが大きいですか?たぶん、pが出力バッファをいっぱいにして、リーダが何かを消費するのを待っているので、ディレクトリリストを書き終えることができます。

あなたは、おそらく方法の終わりに

p.waitFor(); 

を移動する必要があります。

1

waitFor()を呼び出す前に、InputStreamとErrorStreamにアクセスする必要があります。どのように動作するかについては、questionも参照してください。

1

ディレクトリ構造が大きすぎます。 \ PROGRAMFILESが正常に動作します:あなたのp.waitfor()私はCでこれを実行している実行してみました

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

に移動します。

関連する問題