我有一个我无法解释的奇怪行为。
请看一下这个最小的例子:
public class ParallelStreamProgressMonitor
{
public static void main(String[] args)
{
List<Integer> belege = IntStream.range(1, 100).boxed().collect(Collectors.toList());
final ProgressMonitor pm = new ProgressMonitor(null, "Initialmessage", "Initial Note", 0, belege.size());
pm.setMillisToDecideToPopup(0);
pm.setMillisToPopup(0);
pm.setMaximum(belege.size());
pm.setNote("Now I am working");
AtomicInteger counter = new AtomicInteger();
belege.stream().parallel().forEach(b ->
{
System.out.println(b);
pm.setProgress(counter.getAndIncrement());
try
{
//something time consuming ...
Thread.sleep(1000);
}
catch (InterruptedException e)
{
// ignore
}
});
}
}
执行此操作时,您通常会期望 ProgressMonitor 会出现并显示执行进度。
似乎对于每个并行流执行,都会额外显示一个 ProgressMonitor 实例。
是否有一个原因?如何实现只显示一个对话框并显示进度?