Качели JProgressBar не перекрашиваются, как я ожидал - PullRequest
1 голос
/ 12 октября 2010

Привет всем, у меня довольно простая проблема, с которой кто-то может мне помочь.Все, что мне нужно, это небольшой фрейм с индикатором выполнения, который обновляется, сейчас он не обновляется:

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 вечно).

Спасибо!

Ответы [ 2 ]

3 голосов
/ 12 октября 2010

Это потому, что createDialog блокирует, поэтому bar.setValue не будет вызываться, пока вы не нажмете OK в диалоговом окне.

Вам следует обновить индикатор выполнения в другом потоке.

Например:

    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);
1 голос
/ 12 октября 2010

Необходимо убедиться, что метод setValue вызывается из потока диспетчеризации событий.Для этого вы можете использовать SwingUtilities.invokeLater.

...