在Java中,我們可以使用ProgressBar
庫(kù)來(lái)創(chuàng)建一個(gè)進(jìn)度條。要處理用戶中斷操作,我們可以使用Thread
和ExecutorService
來(lái)實(shí)現(xiàn)。以下是一個(gè)簡(jiǎn)單的示例:
ProgressBar
庫(kù)依賴到你的項(xiàng)目。如果你使用Maven,可以在pom.xml
文件中添加以下依賴: <groupId>me.tongfei</groupId>
<artifactId>progressbar</artifactId>
<version>0.9.2</version>
</dependency>
InterruptibleProgressBarDemo.java
的類,并編寫(xiě)以下代碼: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++) {
// 模擬耗時(shí)任務(wù)
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();
}
}
}
在這個(gè)示例中,我們創(chuàng)建了一個(gè)包含100個(gè)任務(wù)的進(jìn)度條。我們使用ExecutorService
來(lái)運(yùn)行一個(gè)單線程任務(wù),該任務(wù)將逐步更新進(jìn)度條。我們使用Future.get()
方法設(shè)置了一個(gè)超時(shí)時(shí)間(5秒),以便在用戶中斷操作時(shí)取消任務(wù)。
當(dāng)用戶中斷操作時(shí)(例如,通過(guò)按下Ctrl+C),TimeoutException
將被捕獲,我們將取消任務(wù)并關(guān)閉進(jìn)度條。