栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在循环中使JProgressBar更新值时出现问题(线程)

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在循环中使JProgressBar更新值时出现问题(线程)

这是供您查看的一些基础,如果您可以学习它并理解为什么其中每个代码段都存在,那么我认为它将有所帮助。随时在评论中提问(尽管我现在要睡觉了!)

例:

public class ProgressBarDemo extends Jframe {    private final JProgressBar progressBar = new JProgressBar(0, 100);    private int progressCounter = 0;    public ProgressBarDemo() {        setContentPane(progressBar);        setPreferredSize(new Dimension(100, 100));        setDefaultCloseOperation(EXIT_ON_CLOSE);        pack();        new Thread(new Runnable() { public void run() {     while (progressCounter <= 100) {         SwingUtilities.invokeLater(new Runnable() {  public void run() {      progressBar.setValue(progressCounter++);  }         });         try { Thread.sleep(500); } catch (InterruptedException e) {}     } }        }).start();    }    public static void main(String[] args) {        SwingUtilities.invokeLater(new Runnable() { public void run() {     new ProgressBarDemo().setVisible(true); }        });    }}

解决问题的两种不同方法,而使用SwingWorker:

SwingWorker示例1:

    ....    public ProgressBarDemo() {        setContentPane(progressBar);        setPreferredSize(new Dimension(100, 100));        setDefaultCloseOperation(EXIT_ON_CLOSE);        pack();        SwingWorker<Integer, Void> worker = new SwingWorker<Integer,Void>() { public Integer doInBackground() {     while (progressCounter <= 100) {         setProgress(progressCounter++);         try { Thread.sleep(500); } catch (InterruptedException e) {}     }     return 0; }        };        worker.addPropertyChangeListener(new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent event) {     if ("progress".equals(event.getPropertyName())) {         progressBar.setValue((Integer)event.getNewValue());     } }        });        worker.execute();    }    ....

SwingWorker示例2(虽然不太好,但是很有趣):

    ....    public ProgressBarDemo() {        setContentPane(progressBar);        setPreferredSize(new Dimension(100, 100));        setDefaultCloseOperation(EXIT_ON_CLOSE);        pack();        new SwingWorker<Integer,Integer>() { public Integer doInBackground() {      while (progressCounter <= 100) {         publish(progressCounter++);         try { Thread.sleep(500); } catch (InterruptedException e) {}   }     return 0; } public void process(List<Integer> progresses) {     Integer maxProgress = null;     for (int progress : progresses) {         if (maxProgress == null || progress > maxProgress) {  maxProgress = progress;         }     }     progressBar.setValue(maxProgress); }        }.execute();    }    ....


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/454778.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号