3

可能是一个误导性的标题,但感谢其他问题的人,我的程序有些工作,但现在不知道该怎么做。

这是我运行命令提示符命令并返回输出的方法

public static String cmdExec(String cmdLine) {
    String line;
    String output = "";
    try {
        Process p = Runtime.getRuntime().exec(cmdLine);
        BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
        while ((line = input.readLine()) != null) {
            output += (line + '\n');
        }            
        input.close();           
        }
    catch (Exception ex) {
        ex.printStackTrace();
    }

    return output;
}

它按照我希望的方式工作,但现在当我运行此方法时,它将等到一切都完成,然后返回输出,这不是我想要的。

我制作了一个使用 cmdExec 方法的 ping 泛洪方法。这是我如何调用 cmdExec()

String[] input = ipTextField.getText().split(":");

    if(input.length == 2) {
        System.out.println(cmdExec("cmd /c ping " + input[0] + " -t -n " + Integer.parseInt(input[1])));

因此,例如,如果我在程序中输入“127.0.0.1:3”,它将向 localhost 发送 3 个数据包。现在的问题是,不是将我从命令提示符 1 逐个打印出来的行作为输出,而是等到所有 3 个数据包都发送完毕,然后打印输出的完整输出。

如果我在命令提示符下键入“ping 127.0.0.1 -t -n 3”,它将逐个打印回复,而不是一次打印,那么我将如何在我的程序中做同样的事情呢?

4

2 回答 2

2

代替

while ((line = input.readLine()) != null) {
            output += (line + '\n');
        } 

要立即将结果输出到命令行,只需在 while 循环内打印

     while ((line = input.readLine()) != null) {
         System.out.println(line);               
         output += (line + '\n');
      } 
于 2013-04-07T17:44:52.147 回答
0

您可以通过以下方式连续打印:

while ((line = input.readLine()) != null) {
    System.out.println(line);
    output += (line + '\n');
}   

(以下内容对未来的观众仍然有用,但不是该问题的适用答案。) 只需在从输出流中读取之前插入 a 。process.waitFor()此命令会等到进程终止后再继续。然后,您也不必逐行阅读。您可以一次简单地转储缓冲区。

要么这样,要么你可以找到一个只出现在最后一行的字符串(例如Minimum在 Windows 中)并将 while 条件更改为:

while((line == input.readline()).indexOf("Minimum") == -1)

于 2013-04-07T17:43:31.037 回答