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

如何在控制台中显示正在执行的命令并在java中访问其输出,java,console,hidden,Java,Console,Hidden,我有一个命令行工具,可以查询服务器并打印待运行作业的状态。这可能需要30秒。我需要从java调用这个工具,我想在GUI的文本区域中显示它的输出。出于示例的目的,假设该命令在windows中为“dir” Process.getRuntime().exec(“cmd/c dir”)阻塞直到命令完成执行,因此我认为最好在终端中显示正在执行的命令,然后读取输出并在我的文本区域中显示,以供将来参考。但是,控制台是隐藏的,给用户的印象是应用程序已经停止工作。经过大量研究,我尝试: cmd/k dir-在后台

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

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

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

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

cmd/k开始目录
-与上述结果相同


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

您可以使用该过程获取它的输入/输出/错误流。但是您需要获取流程对象-
processp=process.getRuntime().exec(“cmd/c dir”)请参阅。

运行时.exec不应阻止,直到命令完成,直到它启动并且您的进程再次获得一些处理器时间。在我的场景中,它确实会阻止。在exec中指定的命令完成运行之前,它不会转到代码中的下一行。。。是否有一种方法可以在写入时访问输出?我不这么认为。。。它是一个外部进程,必须在控制返回Java应用程序读取输出之前完成执行。能够在写入时读取输出将非常棒!!exec()不会阻塞。您可以读取和写入外部进程。如果它被阻塞,它几乎是无用的。这正是我用来执行命令和读取输出的代码,但是控制台窗口不会弹出并显示正在执行的命令。如何让windows命令提示符显示,执行显示输出的命令,然后允许我如上所述读取输出并在文本区域中显示它?呃。。。你不能。然后,输出将出现在控制台窗口中。您只需创建自己的窗口并显示正在进行的操作。如果你真的想要的话,让它看起来像一个windows命令窗口。好的,这很有意义。是否有一种方法可以在生成输出时在命令窗口中显示输出?似乎您必须等待流程完成执行,然后才能迭代输出。我的命令需要30秒才能执行-我希望在写入时显示控制台输出,而不是在命令完成执行后显示。您正在读取外部进程输出的命令。exec()不会阻塞。如果
dir
需要那么长时间才能开始输出。。。你对此无能为力。在自己的线程中启动exec()调用,这样您的UI就不会没有响应。很抱歉,exec不会阻止它的
bufferedReader.readLine()
,这需要一段时间才能执行,但只是第一次执行。如果无法加快这个过程(通过其他方法或其他方法),我需要优化处理输出和更新GUI的方式。
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);
}