【AI总结】Java中添加进度条

1. 为什么要给后台任务加进度条?

在 AI 训练、数据迁移、批量文件处理等场景,如果没有视觉反馈,用户会怀疑程序“卡死”。
控制台一行行 System.out.println("处理完第 i 条") 太 low,我们需要百分比 + 已用时间 + 剩余时间的实时刷新。


2. 选型:me.tongfei/progressbar

特点说明
零依赖纯 Java 实现,不依赖 JNI
一行接入ProgressBar.wrap(list, "任务名")
信息全百分比、速度、ETA(剩余时间)、吞吐量
多风格控制台、GUI 均可扩展

3. Maven 坐标 & 版本适配(⚠️ 重点)

progressbar 版本编译 JDK运行最低 JDK备注
0.10.x99+功能最全,但 不兼容 Java 8
0.7.488+最后一个 Java 8 可用版本,功能已足够

如果你看到 UnsupportedClassVersionError: 53.0,说明用了 0.10.x 却在 Java 8 运行,降级到 0.7.4 即可。

<!-- Java 8 用户 -->
<dependency>
    <groupId>me.tongfei</groupId>
    <artifactId>progressbar</artifactId>
    <version>0.7.4</version>
</dependency>

<!-- Java 11+ 用户 -->
<dependency>
    <groupId>me.tongfei</groupId>
    <artifactId>progressbar</artifactId>
    <version>0.10.0</version>
</dependency>

4. 控制台 3 种用法

4.1 最简洁:wrap 一行搞定

List<String> texts = loadTexts();
for (String txt : ProgressBar.wrap(texts, "向量化")) {
    computeVector(txt);   // 你的耗时操作
}

4.2 手动 step(适合未知总量)

int total = 100_000;
ProgressBar pb = new ProgressBar("任务", total);
for (int i = 0; i < total; i++) {
    doWork(i);
    pb.step();            // 每次 +1
}
pb.close();

4.3 线程池批量任务

ExecutorService pool = Executors.newFixedThreadPool(8);
ProgressBarBuilder pbb = new ProgressBarBuilder()
        .setTaskName("线程池任务")
        .setStyle(ProgressBarStyle.ASCII);   // 某些终端更兼容

List<Future<?>> futures = new ArrayList<>();
for (String txt : texts) {
    futures.add(pool.submit(() -> doWork(txt)));
}
ProgressBar.wrap(futures, pbb).forEach(f -> {
    try { f.get(); } catch (Exception ignored) {}
});
pool.shutdown();

5. 实时效果截图

向量化  42% │██████▍    │ 42000/100000 (00:00:14 / 00:00:19) 3.1k items/s

6. GUI 场景怎么办?

框架官方组件
SwingJProgressBar + SwingWorker
JavaFXProgressBar + Task

控制台直接 ProgressBar 即可;Swing/JavaFX 场景 用自带组件更自然,本文不再展开。


7. 完整可运行 Demo(Java 8)

import me.tongfei.progressbar.*;
import java.util.*;
import java.util.concurrent.ThreadLocalRandom;

public class ProgressBarDemo {
    public static void main(String[] args) {
        List<String> data = new ArrayList<>();
        for (int i = 0; i < 200; i++) data.add("item-" + i);

        // 一行搞定
        for (String s : ProgressBar.wrap(data, "Demo")) {
            fakeWork();
        }
        System.out.println("✅ 完成!");
    }

    private static void fakeWork() {
        try {
            Thread.sleep(ThreadLocalRandom.current().nextInt(30, 80));
        } catch (InterruptedException ignored) {}
    }
}

运行

mvn package
java -jar target/demo.jar

8. 常见坑 & FAQ

问题解决
UnsupportedClassVersionError: 53.0降级到 0.7.4
IDEA 控制台不刷新勾上 Build → Delegate IDE build/run to Maven
Windows PowerShell 乱码ProgressBarStyle.ASCIIsetCharset(StandardCharsets.UTF_8)

9. 总结

  1. Java 8:用 0.7.4 即插即用。
  2. Java 11+:直接用 0.10.x,功能更新。
  3. 一行 ProgressBar.wrap(list) 就能拥有专业级进度反馈。
  4. 进度条让后台任务“可视化”,用户体验瞬间拉满!

觉得有用就点个赞👍、收藏⭐,评论区交流更多花式进度条!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝吻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值