jscanner

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit d556ea83e67f9cad3e3965d343e744421675509b
parent 4f2c871d004e2598e7f6c29c10a5de6bb273a4a8
Author: Matthias Jaros <jaros@mailbox.org>
Date:   Mon, 16 Feb 2026 17:56:44 +0100

Fixed missing 100% on progressbar

Diffstat:
Msrc/main/java/com/it_jaros/networkScanner/ProgressBar.java | 33+++++++++++++++++++++++----------
1 file changed, 23 insertions(+), 10 deletions(-)

diff --git a/src/main/java/com/it_jaros/networkScanner/ProgressBar.java b/src/main/java/com/it_jaros/networkScanner/ProgressBar.java @@ -8,30 +8,37 @@ import java.util.concurrent.TimeUnit; public class ProgressBar { private ScheduledExecutorService ui = Executors.newSingleThreadScheduledExecutor(); + private List<Progress> hosts; public void start(List<Progress> hosts) { - final int lines = hosts.size(); + this.hosts = hosts; + // move cursor down depending on how many hosts have to be scanned hosts.forEach((h) -> System.out.print("\n")); ui.scheduleAtFixedRate(() -> { - // clear bars by moving cursor up - System.out.print("\u001b[" + lines + "A"); - - // paint a bar per host - for (Progress progress : hosts) { - drawBar(progress); - } + drawProgress(); }, 1, 200, TimeUnit.MILLISECONDS); } + private void drawProgress() { + // clear bars by moving cursor up + final int lines = hosts.size(); + System.out.print("\u001b[" + lines + "A"); + + // paint a bar per host + for (Progress progress : hosts) { + drawBar(progress); + } + } + private void drawBar(Progress progress) { System.out.print("\u001b[2K\r"); - System.out.println(bar( + System.out.println(createBar( progress.host() + " open=" + progress.open().get(), progress.done().get(), progress.total())); } - public String bar(String label, int done, int total) { + public String createBar(String label, int done, int total) { int width = 30; double pct = total == 0 ? 1.0 : (done / (double) total); int filled = (int) (pct * width); @@ -44,6 +51,12 @@ public class ProgressBar { public void stop() { ui.shutdown(); + try { + ui.awaitTermination(10, TimeUnit.SECONDS); + // we need to draw one last time for the 100% to appear + drawProgress(); + } catch (InterruptedException ignored) { + } } void onPortFinished(Progress p) {