1

大家好,我有一个非常简单的问题,应该有人可以帮助我解决。我想要的只是一个带有更新进度条的小框架,现在它没有更新:

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

没有显示 40,000 的值,只有微不足道的 1000。我宁愿不必编写任何类来处理重绘调用或任何涉及的操作(一直没有使用 Swing)。

谢谢!

4

2 回答 2

3

这是因为在您点击对话框上的“确定”之前不会调用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);
于 2010-10-12T17:55:08.673 回答
1

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

于 2010-10-12T17:50:30.870 回答