J'ai écrit du code en utilisant des librairies swing, qui, lorsqu'ajouté un actionlistener, ne mettra pas à jour un progressBar.java swing progressBar
Sans un bouton et un écouteur d'action, cela fonctionne très bien. Comment forcer une mise à jour ProgressBar aussi simplement et proprement que possible? Le code ajouté est un exemple facile à comprendre qui résume mon problème. Si vous commentez une méthode ActionPerformed et exécutez le programme à partir de main, cela fonctionne très bien.
Ne pas coller du code sans l'expliquer.
ps .: Je l'ai vu: swing progressBar threading
public class Okno {
private JProgressBar progressBar = new JProgressBar(0,306);
JFrame f = new JFrame("JProgressBar Sample");
JButton b = new JButton("start");
ActionListener a = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
barupdate();
}
};
private void barupdate(){
for(int p = 1; p<308;p=p+2){
System.out.println(p);
progressBar.setValue(p);
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private Okno(){
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
progressBar.setStringPainted(true);
f.add(progressBar, BorderLayout.SOUTH);
f.add(b, BorderLayout.NORTH);
b.addActionListener(a);
f.setSize(300, 300);
f.setVisible(true);
}
public static void main(String[] args) {
Okno okno = new Okno();
}
}
Ceci est un problème très commun qui a généralement résolu de la même manière, la meilleure solution dans ce cas est normalement en utilisant un 'SwingWorker', [par exemple] (http://stackoverflow.com/questions/12020949/jprogressbar-isnt -progressing/12021971 # 12021971). Vous pouvez également jeter un coup d'œil à [Concurrency in Swing] (http://docs.oracle.com/javase/tutorial/uiswing/concurrency/) pour plus de détails sur le problème. Dans la plupart des cas, utiliser un autre 'Thread' n'est pas le meilleur choix, Swing n'est pas thread-safe et vous devez prendre des précautions supplémentaires pour mettre à jour l'interface utilisateur, que' SwingWorker' vous fournit gratuitement;) – MadProgrammer
@ MadProgrammer, 'la meilleure solution dans ce cas est normalement l'utilisation d'un SwingWorker ... vous devriez jeter un oeil à la concurrence dans Swing,' - j'aurais aimé y penser. – camickr
@camickr La question devrait être fermée, mais je sais que vous avez des problèmes avec les gens qui font cela, alors j'ai laissé mon commentaire (vous soutenant répondu) et est parti – MadProgrammer