【AI总结】Java中添加进度条
Java 8:用 0.7.4 即插即用。Java 11+:直接用 0.10.x,功能更新。一行就能拥有专业级进度反馈。进度条让后台任务“可视化”,用户体验瞬间拉满!
·
文章目录
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.x | 9 | 9+ | 功能最全,但 不兼容 Java 8 |
0.7.4 | 8 | 8+ | 最后一个 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 场景怎么办?
框架 | 官方组件 |
---|---|
Swing | JProgressBar + SwingWorker |
JavaFX | ProgressBar + 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.ASCII 或 setCharset(StandardCharsets.UTF_8) |
9. 总结
- Java 8:用 0.7.4 即插即用。
- Java 11+:直接用 0.10.x,功能更新。
- 一行
ProgressBar.wrap(list)
就能拥有专业级进度反馈。 - 进度条让后台任务“可视化”,用户体验瞬间拉满!
觉得有用就点个赞👍、收藏⭐,评论区交流更多花式进度条!
更多推荐
所有评论(0)