可能是一个误导性的标题,但感谢人们对我的另一个问题,我的程序有点工作,但现在不知道该怎么做。
这是我运行命令提示符命令并返回输出
的方法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 flooding方法。这是我如何调用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”,它将逐个打印回复,而不是一次打印,所以我如何在我的程序中执行相同操作?
答案 0 :(得分:2)
而不是
while ((line = input.readLine()) != null) {
output += (line + '\n');
}
要立即将结果输出到命令行,只需在while循环中打印
while ((line = input.readLine()) != null) {
System.out.println(line);
output += (line + '\n');
}
答案 1 :(得分:0)
您可以使用以下方式连续打印:
while ((line = input.readLine()) != null) {
System.out.println(line);
output += (line + '\n');
}
(以下内容对未来的观众仍然有用,但不是该问题的适用答案。)
只需在从输出流中读取之前插入process.waitFor()
。此命令等待,直到进程在继续之前死亡。然后,您也不必逐行阅读。您可以简单地一次性转储缓冲区。 击>
或者这样,或者你可以找到一个只出现在最后一行的字符串(例如Windows中的Minimum
)并将while条件更改为:
while((line == input.readline()).indexOf("Minimum") == -1)
击> <击> 撞击>