阅读量:0
在Java中,我们可以使用ProgressBar
库来创建一个进度条。要处理用户中断操作,我们可以使用Thread
和ExecutorService
来实现。以下是一个简单的示例:
- 首先,添加
ProgressBar
库依赖到你的项目。如果你使用Maven,可以在pom.xml
文件中添加以下依赖:
<groupId>me.tongfei</groupId> <artifactId>progressbar</artifactId> <version>0.9.2</version> </dependency>
- 创建一个名为
InterruptibleProgressBarDemo.java
的类,并编写以下代码:
import me.tongfei.progressbar.*; import java.util.concurrent.*; public class InterruptibleProgressBarDemo { public static void main(String[] args) { int totalTasks = 100; ExecutorService executor = Executors.newSingleThreadExecutor(); ProgressBar progressBar = new ProgressBarBuilder() .setTaskName("Processing tasks") .setInitialMax(totalTasks) .build(); Future<?> taskFuture = executor.submit(() -> { for (int i = 0; i< totalTasks; i++) { // 模拟耗时任务 try { Thread.sleep(100); } catch (InterruptedException e) { System.out.println("Task interrupted."); break; } progressBar.step(); } progressBar.close(); }); try { taskFuture.get(5, TimeUnit.SECONDS); } catch (TimeoutException e) { System.out.println("User interrupted the operation."); taskFuture.cancel(true); progressBar.close(); } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } finally { executor.shutdown(); } } }
在这个示例中,我们创建了一个包含100个任务的进度条。我们使用ExecutorService
来运行一个单线程任务,该任务将逐步更新进度条。我们使用Future.get()
方法设置了一个超时时间(5秒),以便在用户中断操作时取消任务。
当用户中断操作时(例如,通过按下Ctrl+C),TimeoutException
将被捕获,我们将取消任务并关闭进度条。