SwingWorker 不更新长进程

我正在使用 SwingWorker 和


当过程不是太繁重时,它会完美地更新 JProgressBar(例如包含 62 个元素的“Trames”列表)

当进程繁重时,它不会更新 JProgressBar(我用 100k 个元素进行了测试,它最终可以使用 2M+ elems)

在我的 ProgressWorker 类下面


@Override

protected 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();

                            }

                        }

                    }


DIEA
浏览 135回答 2
2回答

莫回无

好吧,没关系,问题不是我所期望的就在我跳过的代码的第一部分中,我写了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,没有进展很正常
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java