温馨提示×

java progressbar如何处理用户中断操作

小樊
82
2024-09-05 16:38:12
栏目: 编程语言

在Java中,我们可以使用ProgressBar库来创建一个进度条。要处理用户中断操作,我们可以使用ThreadExecutorService来实现。以下是一个简单的示例:

  1. 首先,添加ProgressBar库依赖到你的项目。如果你使用Maven,可以在pom.xml文件中添加以下依赖:
   <groupId>me.tongfei</groupId>
   <artifactId>progressbar</artifactId>
   <version>0.9.2</version>
</dependency>
  1. 创建一个名为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将被捕获,我们将取消任务并关闭进度条。

0