私は次のコードを持っています。私のJProgressBarは100%まで更新されていません
public class MyProgressBar extends JPanel implements MyData, Serializable {
/**
*
*/
public static final int MAX = 10000;
public static final int WIDTH = 400;
public static final int HEIGHT = 75;
private JProgressBar MyBar = new JProgressBar(SwingConstants.HORIZONTAL, 0, MAX);
private JFrame MyFrame = new JFrame();
private int MyValue = 0;
private Thread MyThread = new Thread(new ProgressThread());
public MyProgressBar() {
add(MyBar);
int x = (MyData.SCREEN.width/2) - (WIDTH/2);
int y = (MyData.SCREEN.height/2) - (HEIGHT/2);
this.setBounds(x, y, WIDTH, HEIGHT);
MyFrame.setBounds(x, y, WIDTH, HEIGHT);
MyFrame.setUndecorated(true);
MyFrame.getContentPane().setSize(new Dimension(WIDTH, HEIGHT));
MyFrame.setMinimumSize(new Dimension(WIDTH, HEIGHT));
MyFrame.setPreferredSize(new Dimension(WIDTH, HEIGHT));
MyFrame.setSize(new Dimension(WIDTH, HEIGHT));
MyFrame.setVisible(false);
MyFrame.getContentPane().setLayout(null);
MyBar.setStringPainted(true);
MyBar.setBorderPainted(true);
MyBar.setValue(0);
MyBar.setBounds(0, 0, WIDTH, HEIGHT);
MyFrame.add(MyBar);
MyFrame.pack();
MyFrame.repaint();
}
public void MyUpdateBar() {
MyBar.setValue(MyValue);
MyBar.repaint();
MyFrame.repaint();
this.repaint();
//dbug.Message("MYPROGRESSBAR", "MyUpdateBar", "Value is %3.2f %d", MyBar.getPercentComplete(), MyValue);
}
public void MySetValue(int percent) {
MyValue = (int)(MAX * ((double)percent/100.0));
MyUpdateBar();
//dbug.Message("MYPROGRESSBAR", "MySetValue", "Value is %3.2f %d percent was %d", MyBar.getPercentComplete(), MyValue, percent);
}
public void CreateAndShow() {
MyFrame.setVisible(true);
MyThread.start();
}
public void HideAndClear() {
MyThread.stop();
//frame.setVisible(false);
}
class ProgressThread implements Runnable {
public void run() {
EventQueue.invokeLater(new Runnable() {
public void run() {
while(MyValue < MyBar.getMaximum()) {
MyBar.setValue(MyValue);
MyBar.repaint();
MyFrame.repaint();
dbug.Message("MYPROGRESSBAR", "THREAD", "Value is %3.2f %d", MyBar.getPercentComplete(), MyValue);
}
}
});
}
}
}
ご覧のとおり、進捗状況を表示したいクラスを作成しました。私はクラスをインスタンス化します。私のXMLファイルをロードして、私がデータを解析しているときに、私のdbugメッセージが出てくるときに私が見るMyValueを更新するよう呼びかけています。しかし、バー自体は100%完成するまで表示されません。私はスレッディングと他の人の例を読んだことがあります。私が彼の例として残しておけばそれはうまくいったのです。スレッドのループを変更してプログレスバーの設定値を読み込んで値を読み込むと、100までは表示されません。
どうしましたか?
ありがとうございます!
にいる間、プログレスバーを更新します、私はここに書きました(ProgressBarForDataFetching:http://tus.svn.sourceforge.net/viewvc/tus/tjacobs/ui/ex/ DataFetcherからの更新を処理します。別のクラスはInputStreamを読み込みます)DataFetcherはtjacobs.ioの同じサイト – ControlAltDel