Swing是一个单线程环境,也就是说,只有一个线程负责处理系统内发生的所有事件,包括重绘事件。如果任何东西由于某种原因阻塞了该线程,它将阻止Swing处理任何新事件,包括重绘事件…
所以这一切…
EventQueue.invokeLater(new Runnable() { @Override public void run() { try { Thread.sleep(1000); } catch (InterruptedException ex) { Logger.getLogger(BandListGenerator.class.getName()).log(Level.SEVERE, null, ex); } jProgressBar2.setValue(progress); }});一直在暂停事件调度线程,以防止它实际进行任何更新(或至少将它们随机隔开)…
您的外循环也很可能是在EDT上下文中运行的,这意味着直到存在外循环,事件队列中的任何内容都不会被处理。您所有的重涂请求都将合并为一个重涂请求,瞧,即时填充进度栏…
您确实应该使用
SwingWorker-我知道您说过尝试过,但是您没有在此方面显示任何代码来进行尝试,因此很难知道为什么它不起作用。



