是否可以跟踪控制外部程序的线程的进度?

时间:2012-12-14 13:08:23

标签: java multithreading

我有一个Java-Gnome GUI,它启动一个单独的线程来运行我没有代码的命令行程序。我想在GUI中显示一个进度条,以显示到目前为止已完成第二个线程的百分比。

鉴于我/我的程序无法控制外部程序这是可能的还是我遇到了一个不确定的脉冲进度条?感谢

1 个答案:

答案 0 :(得分:6)

当命令行程序在控制台中报告其进度时,您可以在Java应用程序中读取此输出。为此,您必须使用Process

创建ProcessBuilder对象
ProcessBuilder processBuilder = new ProcessBuilder("yourCommandLineProgram");
Process process = processBuilder.start();
OutputStream outputStream = process.getOutputStream();

现在,您可以阅读outputStream对象以获取命令行程序的文本输出。

这当然只会在命令行程序向stdout报告其进度以及何时可以使用此输出来确定剩余工作量时帮助您。当程序没有公开这些信息时,就无法找到它的进展(实际上,根据halting problem,如果没有完全执行它,就无法确定程序运行多长时间。)