我正在使用 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
提交
取消