Mon JProgressBar n'est pas mise à Jour Jusqu'à ce qu'il est de 100%

Ok, j'ai le code suivant.

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

Comme vous pouvez le voir, j'ai créé une classe que je veux, montrer le progrès. Ce qui se passe c'est que je instancier la classe. Charger mon fichier XML, puis, comme je suis d'analyse de données, je fais appel à la mise à jour de la Mavaleur que je vois quand je laisse mes dbug messages de sortir. Cependant, le bar lui-même n'a même pas montrer jusqu'à ce qu'elle est complète à 100%. J'ai lu sur le filetage et à la suite de quelqu'un d'autre exemple, et si je l'ai laissé comme son exemple, il a travaillé. Si j'ai fait un peu de bricolage (changer une boucle dans le fil pour remplir la setvalue de la barre de progression de lecture d'une valeur), il n'a même pas montrer jusqu'à ce qu'il est 100.

Qu'ai-je fait de mal?

Merci!

Si vous voulez un exemple avec l'aide de la progressbar correctement, je l'ai écrit ici (ProgressBarForDataFetching: tus.svn.sourceforge.net/viewvc/tus/tjacobs/ui/ex qui gère les mises à jour de DataFetcher, une autre classe, j'ai écrit qui se lit d'un InputStream. Vous pouvez trouver DataFetcher sur le même site sous tjacobs.io

OriginalL'auteur Patrick Aquilone | 2012-05-03