我正在使用 SwingWorker 和当过程不是太繁重时,它会完美地更新 JProgressBar(例如包含 62 个元素的“Trames”列表)当进程繁重时,它不会更新 JProgressBar(我用 100k 个元素进行了测试,它最终可以使用 2M+ elems)在我的 ProgressWorker 类下面@Overrideprotected Object doInBackground() throws Exception { // TODO Auto-generated method stub // here process i skipped for (Trame t : trames) { float progress = (float)FileRW.tramescounter/FileRW.maxtrames; progress = progress*100; int p = (int) progress; setProgress(p); System.out.println(getProgress()+"+p"+" ---- progress"+p+" ---- double"+progress); Thread.sleep(25); FileRW.tramescounter++; // here process i skipped } // here process i skipped return null;} 此外,我的控制器类:ProgressWorker pw = new ProgressWorker();pw.addPropertyChangeListener(new PropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent evt) { String name = evt.getPropertyName(); if (name.equals("progress")) { int progress = (int) evt.getNewValue(); Vue.bar.setValue(progress); Vue.bar.repaint(); } else if (name.equals("state")) { SwingWorker.StateValue state = (SwingWorker.StateValue) evt.getNewValue(); switch (state) { case DONE: Vue.lastButton.setEnabled(true); if (Vue.check.isSelected()) { if (Desktop.isDesktopSupported()) { Desktop desktop = Desktop.getDesktop(); try { desktop.open(new File(Constants.FICHIER_LOG2)); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
2 回答
莫回无
TA贡献1865条经验 获得超7个赞
好吧,没关系,问题不是我所期望的
就在我跳过的代码的第一部分中,我写了
Vue.bar.setMaximum(trames.size());
更远,
float progress = (float)FileRW.tramescounter/FileRW.maxtrames;
progress = progress*100;
int p = (int) progress;
setProgress(p);
在控制器类中
Vue.bar.setValue(progress);
但是 ProgressWorker 中设置的进度值是从 0 到 100
我的最大 ProgressBar 值为 100K,但 0 < 进度值 <100,
没有进展很正常
添加回答
举报
0/150
提交
取消