我在此之前搜索了论坛,并在命令行上找到了一些进度条的实现示例。现在我还有一个问题。我使用以下实现示例:
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()方法,它就会覆盖之前的一个线程。
有人可以判断这是否可能,如果可以,怎么做?
非常感谢。
答案 0 :(得分:3)
<强>表示强>
在简单的命令行中,如果您的进度条需要整行,则无法执行此操作。您可以使用\r
返回到行的开头,但不能返回上一行。
但是,您可以在同一行显示3个进度条。
多线程问题
让几个线程以有序的方式输出到单个流是很复杂的。让另一个线程处理输出,并从工作线程重新接收消息要容易得多。
这些消息可以采用线程安全队列中的项目形式,信号,通过线程安全流的字节,或者您可以使用的任何内容。
答案 1 :(得分:0)
要在终端/控制台模拟器上实现3个进度条更新,您需要一个可以在终端模拟器上进行屏幕操作的Java库...就像经典的屏幕编辑器那样做。
This SO question询问此类库的可用性。