2012-02-01 2 views
3

Я пытаюсь запустить команды с помощью java-программы, но функция p.waitfor() ждет навсегда. Что не так с кодом?p.waitfor() ждет forever

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

Слишком большая структура вашего каталога. Двигайте 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 работает отлично.