首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新JProgressBar

更新JProgressBar
EN

Stack Overflow用户
提问于 2010-07-04 20:18:09
回答 6查看 9.8K关注 0票数 2

我无法更新我的进度条...这是我的代码

代码语言:javascript
复制
Thread t=new Thread(new Runnable(){
        public void run(){
            int i=1;
            jProgBar.setMinimum(0);
            jProgBar.setMaximum(100);
            try {
                while(i<=100 || true){
                    jProgBar.setValue(i);
                    i++;
                    Thread.sleep(50);
                }
            }
            catch (InterruptedException ex){
                jProgBar.setValue(jProgBar.getMaximum());
            }
        }
    });
    t.start();

    .... Something code that correctly works

    t.interrupt();

进度条状态仅在线程结束时更新。有人能帮我吗??

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-07-09 07:50:48

谢谢大家。我就是这样解决的

代码语言:javascript
复制
try{
       jProgBar.setIndeterminate(true);
       jProgBar.setStringPainted(true);
       jProgBar.setBorderPainted(true);
       new Thread(new Runnable() {
           public void run() {
               ...
               // here is code that i've to wait
               // after this i stop my jProgressBar
               ...
               jProgBar.setStringPainted(false);
               jProgBar.setBorderPainted(true);
               jProgBar.setIndeterminate(false);
       }
       }).start();
   }
   catch(IllegalStateException ex){
       //some code
   }
票数 1
EN

Stack Overflow用户

发布于 2010-07-04 20:23:39

在休眠之前,添加一个对SwingUtilties.invokeLater()的调用,该调用产生一个线程,以在EDT中的进度栏上触发一个firePropertyChange。

票数 4
EN

Stack Overflow用户

发布于 2010-07-05 02:53:02

直接使用模型而不是JProgressBar:

代码语言:javascript
复制
DefaultBoundedRangeModel model = new DefaultBoundedRangeModel();
JProgressBar bar = new JProgressBar(model);

// Somewhere else, perhaps in another Thread
model.setValue(i)

下面的示例运行良好:

代码语言:javascript
复制
public static void main(String[] args) throws InterruptedException {
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(200, 100);
    frame.setVisible(true);
    final DefaultBoundedRangeModel model = new DefaultBoundedRangeModel();
    frame.add(new JProgressBar(model));
    Thread t = new Thread(new Runnable() {
        public void run() {
            int i = 1;
            model.setMinimum(0);
            model.setMaximum(100);
            try {
                while (i <= 100 || true) {
                    model.setValue(i);
                    i++;
                    Thread.sleep(50);
                }
            } catch (InterruptedException ex) {
                model.setValue(model.getMaximum());
            }
        }
    });
    t.start();

    Thread.sleep(2000);

    t.interrupt();
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3174613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档