2017-01-21 35 views
0

我運行下面的代碼輸出:運行在Java進程生成多個命令,並得到由bufferreader

public static void main(String[] args) throws IOException, InterruptedException { 
    ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/C", "echo hello"); 
    Process p = pb.start(); 


    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(p.getInputStream())); 
    String line, l = ""; 
    while ((line = bufferedReader.readLine()) != null) { 

     System.out.println(l); 
     l = l + line; 

    } 

    p.destroy(); 
    bufferedReader.close(); 
    System.out.println("completed"); 
    ProcessBuilder pb1 = new ProcessBuilder("cmd.exe", "/C", "echo hi"); 
    Process p1 = pb1.start(); 

    line = ""; 
    BufferedReader bufferedReader1 = new BufferedReader(new InputStreamReader(p1.getInputStream())); 

    while ((line = bufferedReader1.readLine()) != null) { 

     l = l + line; 
     System.out.println(l); 

    } 

    p1.destroy(); 
    bufferedReader1.close(); 
    System.out.println("completed"); 
} 

但在運行我的代碼的結果已經由兩個buffer-reader正確提取。

問題是程序的執行沒有終止,並且被掛起。

回答

0

你爲什麼不創建一個把你command並返回你的result,這樣你可以執行多個命令的方法,你可以使用它的每一個地方在你的程序中,如果你需要一些改變你只需要改變的這種方法,而不是在所有的程序:

你的代碼應該是像這樣:

public static void main(String[] args) { 
    String command1 = "echo hello"; 
    String command2 = "echo hi"; 
    System.out.println(executerCommand(command1)); 
    System.out.println(executerCommand(command2)); 
} 

public static String executCommand(String command) { 
    String line; 
    String resultat = ""; 
    try { 
     ProcessBuilder builder; 

     builder = new ProcessBuilder("cmd.exe", "/c", command); 

     builder.redirectErrorStream(true); 
     Process p = builder.start(); 
     BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream())); 
     while (true) { 
      line = r.readLine(); 
      if (line == null) { 
       break; 
      } 
      resultat += line + "\n"; 
     } 
    } catch (IOException e) { 
     System.out.println("Exception = " + e.getMessage()); 
    } 
    return resultat; 
} 

這返回的結果是這樣的:

run: 
hello 

hi 

BUILD SUCCESSFUL (total time: 0 seconds) 

希望這可以幫到你

+0

是的,它已經工作。但我怎麼不明白。在我的計劃中,我已經關閉了流程並關閉了流。但是在你的程序中,既沒有關閉進程,也沒有關閉流。但它仍然有效。 – sunny

+0

你的代碼工作正常,也許你正在使用你的程序中的東西,使你的問題,祝你好運@sunny –

相關問題