diff options
| author | 2026-03-09 12:59:56 +0100 | |
|---|---|---|
| committer | 2026-07-09 09:59:28 +0200 | |
| commit | 699afc9450e7b083ecc0002b5493e6cd0e39b250 (patch) | |
| tree | 0cf4f8640c89ea72e402f83f3b355c8583c07287 /src/main/java/com/it_jaros/networkScanner/ProgressBar.java | |
| parent | 36b2e832b6c992a53abe988c680a94f5919b2fba (diff) | |
Refactored printing of progress bars to be able to handle adding of more
hosts during time
Diffstat (limited to 'src/main/java/com/it_jaros/networkScanner/ProgressBar.java')
| -rw-r--r-- | src/main/java/com/it_jaros/networkScanner/ProgressBar.java | 32 |
1 files changed, 24 insertions, 8 deletions
diff --git a/src/main/java/com/it_jaros/networkScanner/ProgressBar.java b/src/main/java/com/it_jaros/networkScanner/ProgressBar.java index 409668a..78920d4 100644 --- a/src/main/java/com/it_jaros/networkScanner/ProgressBar.java +++ b/src/main/java/com/it_jaros/networkScanner/ProgressBar.java @@ -1,32 +1,48 @@ package com.it_jaros.networkScanner; +import java.util.ArrayList; import java.util.List; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; +import java.util.concurrent.locks.ReentrantLock; public class ProgressBar { private ScheduledExecutorService ui = Executors.newSingleThreadScheduledExecutor(); private List<Progress> hosts; + private ReentrantLock lock = new ReentrantLock(); - public void start(List<Progress> hosts) { - this.hosts = hosts; + public void start() { + System.out.println("Progress:"); + this.hosts = new ArrayList<>(); // move cursor down depending on how many hosts have to be scanned - hosts.forEach((h) -> System.out.print("\n")); + System.out.print("\n"); ui.scheduleAtFixedRate(() -> { - drawProgress(); + lock.lock(); + drawProgress(false); + lock.unlock(); }, 1, 200, TimeUnit.MILLISECONDS); } - private void drawProgress() { - // clear bars by moving cursor up - System.out.print("\u001b[" + hosts.size() + "A"); + private void drawProgress(boolean last) { + // Make space for drawing of progress bars + //System.out.print("\u001b[" + hosts.size() + "B"); // paint a bar per host for (Progress progress : hosts) { drawBar(progress); } + + // move cursor up again + if (!last) + System.out.print("\u001b[" + hosts.size() + "A"); + } + + public void submit(Progress progress) { + lock.lock(); + hosts.add(progress); + lock.unlock(); } private void drawBar(Progress progress) { @@ -54,7 +70,7 @@ public class ProgressBar { try { ui.awaitTermination(10, TimeUnit.SECONDS); // we need to draw one last time for the 100% to appear - drawProgress(); + drawProgress(true); } catch (InterruptedException ignored) { } } |
