命令行上的java progressbar [threads]

时间:2011-03-02 14:05:27

标签: java multithreading command-line progress-bar

我在此之前搜索了论坛,并在命令行上找到了一些进度条的实现示例。现在我还有一个问题。我使用以下实现示例:

public void print_progress(int percent){

StringBuilder bar = new StringBuilder(category + ": [");

    for(int i = 0; i < 50; i++){
        if( i < (percent/2)){
            bar.append("=");
        }else if( i == (percent/2)){
            bar.append(">");
        }else{
            bar.append(" ");
        }
    }

    bar.append("]   " + percent + "%     ");
    System.out.print("\r" + bar.toString());
}

但是我想在三个线程中使用它,同时运行,想要在命令行中显示条形中每个线程的进度。现在,只要线程调用print_progress()方法,它就会覆盖之前的一个线程。

有人可以判断这是否可能,如果可以,怎么做?

非常感谢。

2 个答案:

答案 0 :(得分:3)

<强>表示

在简单的命令行中,如果您的进度条需要整行,则无法执行此操作。您可以使用\r返回到行的开头,但不能返回上一行。

但是,您可以在同一行显示3个进度条。

多线程问题

让几个线程以有序的方式输出到单个流是很复杂的。让另一个线程处理输出,并从工作线程重新接收消息要容易得多。

这些消息可以采用线程安全队列中的项目形式,信号,通过线程安全流的字节,或者您可以使用的任何内容。

答案 1 :(得分:0)

要在终端/控制台模拟器上实现3个进度条更新,您需要一个可以在终端模拟器上进行屏幕操作的Java库...就像经典的屏幕编辑器那样做。

This SO question询问此类库的可用性。