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

これは、ダイアログで[OK]をクリックするまで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 に答える