2012-12-14 23 views
2

我有一个Java-Gnome GUI,它启动一个单独的线程来运行我没有代码的命令行程序。我想在GUI中显示一个进度条,以显示第二个线程已完成的百分比。是否有可能跟踪控制外部程序的线程的进度?

鉴于我/我的程序不控制外部程序,这是可能的还是我卡在一个不确定的脉冲进度条?谢谢

+2

先猜:不,这是不可能的。不知道第二个线程是做什么的。 – Burkhard

+1

外部命令行程序是否通过文本输出报告其进度,还是保持沉默? – Philipp

+0

这是一个名为auCDtect的程序 - 我将它传递给音轨名称,并且它返回与每个音轨有关的文本输出 - 这是由流水线处理的, 我怀疑这可能会回答我的问题......谢谢! – db579

回答

6

当命令行程序在控制台中报告它的进度时,可以在Java应用程序中读取此输出。为了做到这一点,你必须使用ProcessBuilder创建Process对象:

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

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

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

相关问题