如何在控制台中显示命令执行并在java中访问其输出

时间:2011-03-24 00:25:31

标签: java console hidden

我有一个命令行工具,用于查询服务器并打印要运行的待处理作业的状态。这可能需要30秒。我需要从java调用这个工具,我想在我的GUI上的文本区域中显示它的输出。出于示例的目的,假设命令是windows中的“dir”。

Process.getRuntime().exec("cmd /c dir");阻塞,直到命令完成执行,所以我认为最好显示在终端中执行的命令,然后读取输出并将其显示在我的文本区域中以供将来参考。但是,控制台被隐藏,给用户一个应用程序已停止工作的印象。经过大量研究,我尝试过:

cmd /k dir - 在后台运行并可以读取输出,但应用程序挂起,因为它需要/ k开关意味着保持窗口打开,但我看不到它关闭它。

cmd /c start dir - 在新的可见终端中打开,运行但不关闭。手动关闭不允许我读取输出

cmd /k start dir - 与上述结果相同

我的问题是,如何生成一个命令来运行,看它运行,并访问它的输出?

2 个答案:

答案 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