代码之家  ›  专栏  ›  技术社区  ›  zaczap

Swing jprogressbar不会像我预期的那样重新喷漆

  •  1
  • zaczap  · 技术社区  · 14 年前

    嘿,大家好,我有一个很简单的问题,应该有人能帮我解决。我只想要一个带有进度条的小框架来更新,现在它不更新:

    final JProgressBar bar = new JProgressBar(0,250000);
    bar.setValue(1000);
    bar.setIndeterminate(false);
    JOptionPane j = new JOptionPane(bar);
    final JDialog d = j.createDialog(j,"Expierment X");
    d.pack();
    d.setVisible(true);
    bar.setValue(40000);
    

    40000值没有出现,只有1000个。我宁愿不必编写任何类来处理重绘调用或任何与此相关的操作(永远不要使用Swing-In)。

    谢谢!

    2 回复  |  直到 14 年前
        1
  •  3
  •   dogbane    14 年前

    这是因为 createDialog 块如此 bar.setValue 在对话框上单击“确定”之前不会调用。

    您应该在不同的线程中更新进度条。

    例如:

        final JProgressBar bar = new JProgressBar(0,250000);
        bar.setValue(1000);
        bar.setIndeterminate(false);
        JOptionPane j = new JOptionPane(bar);
    
        Thread t = new Thread(){
            public void run(){
                for(int i = 1000 ; i < 250000 ; i+=10000){
                    bar.setValue(i);
                    try {
                        Thread.sleep(100);
                    } catch (InterruptedException e) {
                    }
                }
            }
        };
        t.start();
    
        final JDialog d = j.createDialog(j,"Expierment X");
        d.pack();
        d.setVisible(true);
    
        2
  •  1
  •   Faisal Feroz    14 年前

    你需要确保 setValue 从事件调度线程调用方法。你可以使用 SwingUtilities.invokeLater 为此。

    推荐文章