首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java命令行上的非确定性进度条

java命令行上的非确定性进度条
EN

Stack Overflow用户
提问于 2012-02-16 05:58:45
回答 4查看 4.7K关注 0票数 5

我有一个控制台应用程序,当一些繁重的计算完成时,我想在命令行上放置一个不确定的进度条。目前,我只是简单地打印出一个‘’。对于while循环中的每个迭代,如下所示:

代码语言:javascript
复制
while (continueWork){
    doLotsOfWork();
    System.out.print('.');
}

这是可行的,但我想知道是否有人有更好/更聪明的想法,因为如果循环中有很多迭代,这可能会有点恼人。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-02-16 06:54:52

下面是一个显示旋转进度条和传统样式的示例:

代码语言:javascript
复制
import java.io.*;
public class ConsoleProgressBar {
    public static void main(String[] argv) throws Exception{
      System.out.println("Rotating progress bar");
      ProgressBarRotating pb1 = new ProgressBarRotating();
      pb1.start();
      int j = 0;
      for (int x =0 ; x < 2000 ; x++){
        // do some activities
        FileWriter fw = new FileWriter("c:/temp/x.out", true);
        fw.write(j++);
        fw.close();
      }
      pb1.showProgress = false;
      System.out.println("\nDone " + j);

      System.out.println("Traditional progress bar");
      ProgressBarTraditional pb2 = new ProgressBarTraditional();
      pb2.start();
      j = 0;
      for (int x =0 ; x < 2000 ; x++){
        // do some activities
        FileWriter fw = new FileWriter("c:/temp/x.out", true);
        fw.write(j++);
        fw.close();
      }
      pb2.showProgress = false;
      System.out.println("\nDone " + j);
    }
}

class ProgressBarRotating extends Thread {
  boolean showProgress = true;
  public void run() {
    String anim= "|/-\\";
    int x = 0;
    while (showProgress) {
      System.out.print("\r Processing " + anim.charAt(x++ % anim.length()));
      try { Thread.sleep(100); }
      catch (Exception e) {};
    }
  }
}

class ProgressBarTraditional extends Thread {
  boolean showProgress = true;
  public void run() {
    String anim  = "=====================";
    int x = 0;
    while (showProgress) {
      System.out.print("\r Processing " 
           + anim.substring(0, x++ % anim.length())
           + " "); 
      try { Thread.sleep(100); }
      catch (Exception e) {};
    }
  }
}
票数 4
EN

Stack Overflow用户

发布于 2012-02-16 06:09:27

尝试使用回车符,\r

票数 3
EN

Stack Overflow用户

发布于 2012-02-16 06:15:59

在GUI应用程序中,该方法通常是一个旋转的圆圈或弹跳/循环进度条。我记得很多控制台应用程序使用斜杠、竖线和连字符来创建旋转动画:

代码语言:javascript
复制
\ | / - 

您还可以在括号中使用跳动字符:

代码语言:javascript
复制
[-----*-----]

当然,正如另一个回答中提到的,您希望使用return返回到行的开头,然后打印进度,覆盖现有输出。

编辑: Will在评论中提到的许多更酷的选项:

Cooler ASCII Spinners?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9302117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档