progressbar
progressbar copied to clipboard
Gradle - multiple progress bars
Hey ! Don't know if it's the same problem as this issue : https://github.com/ctongfei/progressbar/issues/20
Progress bar is working fine in my Gradle environment using single progress bars.
But i tried with the "new" multiple progress bars feature initiated by @vehovsky And I can only see a single one.
Pretty simple test :
build.gradle
plugins {
id 'java'
id 'application'
}
group 'com.example'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
implementation "me.tongfei:progressbar:0.9.2"
}
application {
getMainClass().set("Main")
}
Main.java
import me.tongfei.progressbar.ProgressBar;
import java.util.concurrent.atomic.AtomicInteger;
public class Main {
public static void main(String[] args) {
try (ProgressBar pb1 = new ProgressBar("Job1", 10000);
ProgressBar pb2 = new ProgressBar("Job2", 50000)) {
AtomicInteger i1 = new AtomicInteger(0);
AtomicInteger i2 = new AtomicInteger(0);
new Thread(() -> {
while (i1.getAndIncrement() < 10000) {
try {
Thread.sleep(1000);
pb1.step();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
while (i2.getAndIncrement() < 50000) {
try {
Thread.sleep(1000);
pb2.step();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
./gradlew run
only show a single progressbar
They seems to overwrite each other (i can briefly see that on first round)
Works smoothly without Gradle involved.
EDIT : Issue seems similar to this one : https://github.com/ctongfei/progressbar/issues/103 involving IDEA Or this one on Gradle side : https://github.com/gradle/gradle/issues/17581 for another tool
Thanks @mfrechePgest . Yes I am aware of this and this is the same as #20. Sorry, but I have no idea how to fix this.
Hey ! Don't know if it's the same problem as this issue : #20
Progress bar is working fine in my Gradle environment using single progress bars.
But i tried with the "new" multiple progress bars feature initiated by @vehovsky And I can only see a single one.
Pretty simple test :
build.gradle
plugins { id 'java' id 'application' } group 'com.example' version '1.0-SNAPSHOT' repositories { mavenCentral() } dependencies { implementation "me.tongfei:progressbar:0.9.2" } application { getMainClass().set("Main") }
Main.java
import me.tongfei.progressbar.ProgressBar; import java.util.concurrent.atomic.AtomicInteger; public class Main { public static void main(String[] args) { try (ProgressBar pb1 = new ProgressBar("Job1", 10000); ProgressBar pb2 = new ProgressBar("Job2", 50000)) { AtomicInteger i1 = new AtomicInteger(0); AtomicInteger i2 = new AtomicInteger(0); new Thread(() -> { while (i1.getAndIncrement() < 10000) { try { Thread.sleep(1000); pb1.step(); } catch (InterruptedException e) { e.printStackTrace(); } } }).start(); while (i2.getAndIncrement() < 50000) { try { Thread.sleep(1000); pb2.step(); } catch (InterruptedException e) { e.printStackTrace(); } } } } }
./gradlew run
only show a single progressbarThey seems to overwrite each other (i can briefly see that on first round)
Works smoothly without Gradle involved.
EDIT : Issue seems similar to this one : #103 involving IDEA Or this one on Gradle side : gradle/gradle#17581 for another tool
maybe you can try this
/**
* 支持在控制台打印多行进度条
*
* @author LCTR
* @date 2023-05-07
*/
public class ConsoleMultiProgressBarConsumer
extends ConsoleProgressBarConsumer {
final int index;
final PrintStream out;
public ConsoleMultiProgressBarConsumer(PrintStream out,
int index) {
super(out);
this.out = out;
this.index = index;
}
public ConsoleMultiProgressBarConsumer(PrintStream out,
int maxRenderedLength,
int index) {
super(out,
maxRenderedLength);
this.out = out;
this.index = index;
}
@Override
public void accept(String str) {
out.print(StringExtension.newString("\r\n",
index));
out.print(matcher.appendTail(sb));
//super.accept(str);
out.print(StringExtension.newString("\033[F",
index));
}
}
new ProgressBarBuilder()
.setTaskName("#01"))
.setInitialMax(100)
.setConsumer(new ConsoleMultiProgressBarConsumer(new PrintStream(new FileOutputStream(FileDescriptor.out)),
1))
.hideEta()
.setUpdateIntervalMillis(100)
.build();
new ProgressBarBuilder()
.setTaskName("#02"))
.setInitialMax(100)
.setConsumer(new ConsoleMultiProgressBarConsumer(new PrintStream(new FileOutputStream(FileDescriptor.out)),
2))
.hideEta()
.setUpdateIntervalMillis(100)
.build();
new ProgressBarBuilder()
.setTaskName("#03"))
.setInitialMax(100)
.setConsumer(new ConsoleMultiProgressBarConsumer(new PrintStream(new FileOutputStream(FileDescriptor.out)),
3))
.hideEta()
.setUpdateIntervalMillis(100)
.build();