gpt4 book ai didi

JAVA单行字符进度条在NetBeans输出窗口中有效,但在CMD中无效

转载 作者:太空宇宙 更新时间:2023-11-04 09:10:26 25 4
gpt4 key购买 nike

我想要一个基于 CMD 字符的单行更新进度条,它不仅可以在项目编译后在 CMD 中工作,而且可以在 NetBeans OutputWindow 中工作,基本上这里的每个人都说根本不起作用(至少在我在下面制作自己的进度条之前我在这里读过很多帖子)。

The real problem why it does not work normally in NB output window is with System.out.print() together with using \r and by pure coincidence I noticed that when Thread.sleep() is set lower than some 250/300 it stops responding when testing in NB OutputWindow (it outputs as whole only once the code is stopped) but if I increase the value let's say to those 300 it starts work nicely.由于我需要非常简单的无休止地运行 DOS 单行进度条,只是为了让用户知道正在发生一些事情,并且应用程序在执行其操作时不会被卡住,所以它非常适合我的需求。

所以我这样做了:

package jthndemo;

import java.io.PrintStream;
import java.util.concurrent.CompletableFuture;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.SwingUtilities;

public class JthnDEMO {

public static void main(final String[] args) throws InterruptedException {
SwingUtilities.invokeLater(() -> {
PrintStream out = System.out;
int pause = 300;
int progressbarLength = 15;
boolean cond = true;
String txt = "Extracting...please, wait ";
String character = "█";
String str = null;
while (cond) {
int i = 0;
str = txt;
out.print("\r" + str + character);
try {
Thread.sleep(pause);
} catch (InterruptedException ex) {
Logger.getLogger(JthnDEMO.class.getName()).log(Level.SEVERE, null, ex);
}
while (i < progressbarLength) {
str = txt;
for (int j = 0; j < i + 1; j++) {
str += character;
}
out.print("\r" + str);
try {
Thread.sleep(pause);
} catch (InterruptedException ex) {
Logger.getLogger(JthnDEMO.class.getName()).log(Level.SEVERE, null, ex);
}
i++;
}
}
});
}
}

但令我大吃一惊的是,当我编译它并通过 .bat 文件从命令行运行它时,CMD 窗口中的输出仅生成一个完整循环,然后只是轻弹整行而不更新,我不知道为什么。

谁能告诉我为什么我的进度条代码在编译后可以在 NetBeans 8 输出窗口中运行,但不能在 Win7 x64 系统 CMD 窗口中运行?

P.S.:一旦我希望我的无尽进度条结束,变量 cond 的值稍后就会在我的代码中更改(我将重写该行代码,以便该变量在外部其他地方定义),所以不用担心(只是说我知道)。

最佳答案

我无法重现此问题,但问题很可能是您使用 \r 刷新流,然后打印进度条,换句话说,这应该相反:

例如这部分来自:

out.print("\r" + str);

至:

out.print(str + "\r");

请参阅此处:Command line progress bar in Java

IDE 可能在命令行时使用不同的 PrintStream,因此每次调用 print 时可能总是调用 out.flush

关于JAVA单行字符进度条在NetBeans输出窗口中有效,但在CMD中无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59724842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com