我有一个命令行工具,用于查询服务器并打印要运行的待处理作业的状态。这可能需要30秒。我需要从java调用这个工具,我想在我的GUI上的文本区域中显示它的输出。出于示例的目的,假设命令是windows中的“dir”。
Process.getRuntime().exec("cmd /c dir");
阻塞,直到命令完成执行,所以我认为最好显示在终端中执行的命令,然后读取输出并将其显示在我的文本区域中以供将来参考。但是,控制台被隐藏,给用户一个应用程序已停止工作的印象。经过大量研究,我尝试过:
cmd /k dir
- 在后台运行并可以读取输出,但应用程序挂起,因为它需要/ k开关意味着保持窗口打开,但我看不到它关闭它。
cmd /c start dir
- 在新的可见终端中打开,运行但不关闭。手动关闭不允许我读取输出
cmd /k start dir
- 与上述结果相同
我的问题是,如何生成一个命令来运行,看它运行,并访问它的输出?
答案 0 :(得分:4)
Process proc = null;
String[] cmd = { "cmd", "/c", "dir" };
proc = Runtime.getRuntime().exec(cmd);
InputStream inputStream = proc.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String line;
while ((line = bufferedReader.readLine()) != null)
{
System.out.println(line);
}
答案 1 :(得分:0)
您可以使用流程methods获取其输入/输出/错误流。但您需要获取流程对象 - Process p = Process.getRuntime().exec("cmd /c dir");
请参阅this answer also。