Si tu effectues un traitement long dans la fonction actionPerformed, il est normal que l'IHM se fige (car cette fonction est appelée dans le contexte du thread qui se charge de l'affichage). Il faut utiliser un Thread différent et faire ton action longue dans celui-ci. Si tu veux utiliser une barre de progression, regarde du coté de la classe SwingWorker...
Par exemple, si le traitement long est dans la fonction ping, ca donnerait un truc du genre :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| radioButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
final FenetreTransparente gtw = new FenetreTransparente();
gtw.setVisible(true);
gtw.setAlwaysOnTop(true);
gtw.repaint();
gtw.revalidate();
Thread t = new Thread(new Runnable() {
public void run() {
if (!ping()) {
lbStatut.setIcon(new ImageIcon(PanelChoixUser.class.getResource("/javagui/icon32x32/offline.png")));
btnController.setEnabled(false);
btnInstaller.setEnabled(false);
}
else
{
lbStatut.setIcon(new ImageIcon(PanelChoixUser.class.getResource("/javagui/icon32x32/online.png")));
cible = lesResultats[kfinal][0];
btnController.setEnabled(true);
btnInstaller.setEnabled(true);
}
//gtw.setVisible(false);
}
});
t.start();
} |
PS : je n'ai pas testé ce code donc il y a peut etre des problemes d'accolades/parenthèses mais l'idée est la 
PS 2 : Pour bien faire les choses, il faudrait changer les icones/boutons en utilisant
SwingUtilities.invokeLater
Partager