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

标签 java multithreading

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

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

最佳答案

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

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

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

这当然只会在命令行程序向 stdout 报告其进度以及此输出可用于确定剩余工作量时对您有所帮助。当程序不暴露这些信息时,就没有办法知道它的进度(事实上,根据 halting problem ,如果不完全执行一个程序是不可能知道它会运行多长时间的)。

关于java - 是否可以跟踪控制外部程序的线程的进度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13879308/

相关文章:

objective-c - 为 NSRunLoop 找到匹配的 NSThread(需要修复 Socket Rocket)

java - 我的文件无法在 cmd 中打开

java - 从 JMock 的对象返回 ImmutableSet 导致 UndeclaredThrowableException

java - java中如何将货币格式转换为 double

java - 如何将一个值从一个 ArrayList 移动到另一个

python - 如何调试 PyQt 崩溃?

Java - 当前线程完成时启动一个线程

c++ - 提供不确定生命周期 bool 值以在线程之间共享的最简单方法是什么?

java - Spring Social Twitter 保存数据到 MySQL

c - 当发出等待 "join"的 pthread 信号时进程终止