Jus*_*yer 4 java jar batch-file
System.out.println();我只是想知道当我使用批处理文件运行程序时是否有一种方法或其他方法可以创建一个很酷的加载栏。
这里真正的问题是如何使这个栏看起来好像只打印在一行上。
我不希望它分布在多行上,如下所示:
[aaaaaccccccccccccccc] 25%
[aaaaaaaaaacccccccccc] 50%
[aaaaaaaaaaaaaaaccccc] 75%
Run Code Online (Sandbox Code Playgroud)
保持干净的位置会让事情变得更干净、更友好。
非常感谢,
查士丁
编辑:
好的。我设法在这里找到这个链接:How to animate the command line? ,但答案是:
在 Java 中是否有更好的方法来做到这一点?
编辑:
这就是我最终的结果:
static final int PROGRESSBAR_LENGTH = 20;
public static void drawProgressBar(int numerator, int denominator) {
int percent = (int) (((double) numerator / (double) denominator) * 100);
String bar = "[";
int lines = round((PROGRESSBAR_LENGTH * numerator) / denominator);
int blanks = PROGRESSBAR_LENGTH - lines;
for (int i = 0; i < lines; i++)
bar += "|";
for (int i = 0; i < blanks; i++)
bar += " ";
bar += "] " + percent + "%";
System.out.print(bar + "\r");
}
private static int round(double dbl) {
int noDecimal = (int) dbl;
double decimal = dbl - noDecimal;
if (decimal >= 0.5)
return noDecimal + 1;
else
return noDecimal;
}
Run Code Online (Sandbox Code Playgroud)
示例输出:
[||||||||||||||||....] 80%(.=空格)
作为打印退格字符的替代方法,您可以使用回车符:13(十进制)、0xD(十六进制)或 \r(转义字符)。
有以下三项规定:
所以,沿着这些思路:
public static void loadMyProgram() {
while(programStillLoading) {
doSomeLoading();
double loadFraction = howCloseToDone(); // A number between 0 and 1
System.out.print("[");
int i = 0;
for( ; i < (int)(loadFraction * 20); i++)
System.out.print("=");
for( ; i < 20; i++)
System.out.print(" ");
System.out.print("] " + (int)(loadFraction * 100) + "%");
System.out.print((char)13);
//System.out.print((char)0xD); // Same as above, but in hex
//System.out.print("\r"); // Same as above, but as the symbol
}
System.out.println();
}
Run Code Online (Sandbox Code Playgroud)
上面的内容将打印[<bar>] <percent>%,其中<bar>' 0..p'=后跟0..(20-p)' '。它将保持在一条线上。
假设您计算的负载百分比是单调递增的(换句话说,它不像 Windows 负载栏那样在 3 秒内从 20% 到 110% 再到 1%),您不必担心确保你的下一个输出等于或长于你之前的输出,因为这永远是真的。但是,在这种情况下,您可以在“ ”后添加两个空格来处理它%。
| 归档时间: |
|
| 查看次数: |
4337 次 |
| 最近记录: |