【问题标题】:java progressbar on command line [threads]命令行上的java进度条[线程]
【发布时间】:2011-03-02 14:05:27
【问题描述】:

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

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() 方法时,它都会覆盖之前的线程。

有人能告诉我这是否可能吗?如果可以,怎么做?

非常感谢。

【问题讨论】:

    标签: java multithreading command-line progress-bar


    【解决方案1】:

    代表

    在一个简单的命令行上,如果你的进度条占据一整行,这是不可能的。 \r 可以返回到行首,但不能返回到上一行。

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

    多线程问题

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

    这些消息可以采用线程安全队列中的项目、信号、线程安全流中的字节或任何您喜欢的形式。

    【讨论】:

    • 只会尝试处理另一个线程的输出。再次感谢
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2010-10-25
      • 1970-01-01
      • 2012-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多