Mise à jour JProgressBar
-
02-10-2019 - |
Question
Je ne peux pas mettre à jour mon ... c'est progressbar mon code
Thread t=new Thread(new Runnable(){
public void run(){
int i=1;
jProgBar.setMinimum(0);
jProgBar.setMaximum(100);
try {
while(i<=100 || true){
jProgBar.setValue(i);
i++;
Thread.sleep(50);
}
}
catch (InterruptedException ex){
jProgBar.setValue(jProgBar.getMaximum());
}
}
});
t.start();
.... Something code that correctly works
t.interrupt();
L'état de la barre de progression est mis à jour qu'à la fin du fil. aider quelqu'un peut me ??
La solution 5
Merci à tous. Je résolus de cette façon
try{
jProgBar.setIndeterminate(true);
jProgBar.setStringPainted(true);
jProgBar.setBorderPainted(true);
new Thread(new Runnable() {
public void run() {
...
// here is code that i've to wait
// after this i stop my jProgressBar
...
jProgBar.setStringPainted(false);
jProgBar.setBorderPainted(true);
jProgBar.setIndeterminate(false);
}
}).start();
}
catch(IllegalStateException ex){
//some code
}
Autres conseils
Avant le sommeil, ajoutez un appel à SwingUtilties.invokeLater () qui engendre un fil au feu un firePropertyChange sur la barre de progression dans le EDT.
Utilisez un modèle au lieu du JProgressBar directement:
DefaultBoundedRangeModel model = new DefaultBoundedRangeModel();
JProgressBar bar = new JProgressBar(model);
// Somewhere else, perhaps in another Thread
model.setValue(i)
L'exemple suivant fonctionne très bien:
public static void main(String[] args) throws InterruptedException {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(200, 100);
frame.setVisible(true);
final DefaultBoundedRangeModel model = new DefaultBoundedRangeModel();
frame.add(new JProgressBar(model));
Thread t = new Thread(new Runnable() {
public void run() {
int i = 1;
model.setMinimum(0);
model.setMaximum(100);
try {
while (i <= 100 || true) {
model.setValue(i);
i++;
Thread.sleep(50);
}
} catch (InterruptedException ex) {
model.setValue(model.getMaximum());
}
}
});
t.start();
Thread.sleep(2000);
t.interrupt();
}
Le meilleur conseil pour votre situation est d'utiliser SwingWorker . Consultez l'API http: //java.sun .com / JavaSE / 6 / docs / api / javax / Swing / SwingWorker.html
méthode remplacement de processus à la valeur de mise à jour de la barre de progression (il sera fait correctement HAE)
Plus d'informations peuvent être obtenues http: // java .sun.com / produits / JFC / tsc / articles / fils / threads2.html
Par eugener, SwingWorker
est certainement ce que vous voulez être ici en utilisant, ou à tout moment une tâche longue est donné naissance qui pourrait autrement verrouiller votre interface graphique avant la fin. Un tutoriel complet sur l'utilisation des barres de progression avec SwingWorker
est disponible à partir de Sun ^ H ^ H ^ HOracle ici:
http://java.sun.com/docs /books/tutorial/uiswing/components/progress.html
Mettre cet extrait
SwingUtilities.invokeLater(new Runnable() {
public void run() {
jProgBar.repaint();
}
}
Entre 'i ++' et 'Thread.sleep ()' devrait faire le travail. Pour le faire la compilation, la marque jProgBar comme « finale ».