亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

SwingWorker 不更新長進程

SwingWorker 不更新長進程

DIEA 2021-09-15 15:07:12
我正在使用 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,


沒有進展很正常


查看完整回答
反對 回復 2021-09-15
  • 2 回答
  • 0 關注
  • 161 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號