Swing(Java)中的进度条用于命令工具

pau*_*lan 4 java swing progress-bar

我有几个C/C++命令行工具,我用Java.Swing作为GUI包装.命令行工具可能需要几分钟到几小时.进度条似乎是让用户保持理智的好主意.我也认为为进度条包装GUI可能不错,而不仅仅是使用系统输出.但是怎么样?

我认为命令行工具可以将百分比写入stderr,我可以在java中以某种方式读取它.不完全确定这个的机制是什么.我也不清楚异步显示(了解一下invokeLater()).Java新手,也欢迎一般性建议.谢谢.

---更新---

谢谢大家的建议.这是结果代码.

private void redirectSystemStreams() {
    OutputStream out_stderr = new OutputStream() {
      @Override
      public void write(final int b) throws IOException {
        update(String.valueOf((char) b));
      }
      @Override
      public void write(byte[] b, int off, int len) throws IOException {
        update(new String(b, off, len));
      }
      @Override
      public void write(byte[] b) throws IOException {
        write(b, 0, b.length);
      }
    };
    System.setErr(new PrintStream(out_stderr, true));
}

private void update(final String inputText) {
    int value = 20; //parse inputText; make sure your executable calls fflush(stderr) after each fprintf().
    jProgressBar.setValue(value);

    /* Also one can redirect to a textpane
    SwingUtilities.invokeLater(new Runnable() {
      public void run() {
        //update jTextPane with inputText
      }
    });
    */
}
Run Code Online (Sandbox Code Playgroud)

Osc*_*Ryz 6

这似乎非常脆弱,更好的是通过套接字在一个完善的协议或某种RCP(可能是谷歌的protobuf)甚至网络服务进行通信.

如果你仍然坚持认为你可以使用ProcessBuilder在Java中启动一个进程,它将为你提供一个Process引用,你可以让InputStream读取标准输出,但同样,这对我来说似乎非常脆弱.

我希望这有帮助.