Problème avec actionperformed

Signaler
Messages postés
4
Date d'inscription
dimanche 28 mars 2004
Statut
Membre
Dernière intervention
9 décembre 2005
-
Messages postés
5363
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
30 avril 2021
-
Bonjour à tous et à toutes !!
Voilà mon probléme.
J'ai une appli ou se trouve un bouton (dont l'actionCommand est "details") écouté par un actionlistener dont le code se trouve ci-dessous :

public void actionPerformed(ActionEvent e) {
JFrame j;
if(e.getActionCommand().equals("details")) {
// Ceci creer une JFrame de chargement avec un message "Attendez svp" et l'affiche (setVisible(true))
j = cmd.afficherCommande();

// Ceci est un traitement long, dans mon appli ce sont des deplacements de fichiers et des acces BD assez longs
for(long i =0;i<100000000;i++){
System.out.println(i);
}

// Une fois le traitement termine on ferme la fenetre
j.setVisible(false);
}

Le probléme est le suivant : la fenetre se cree, s'affiche mais reste grisée jusqu'à ce que le traitement long soit effectué et la ferme ensuite... mais le blem c'est qu'elle est grisée, rien ne s'affiche a l'interieur.... et j'arrive pas a trouver la soluce.....

Merci!!

4 réponses

Messages postés
5363
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
30 avril 2021
110
Salut,



Tu peux utiliser un timer ou thread tout dépend de tes besoins

WORA
Messages postés
365
Date d'inscription
mercredi 9 novembre 2005
Statut
Membre
Dernière intervention
2 décembre 2006
2
salut,

for(long i=0;i<100000000;i++){
System.out.println(i);// elle reste grise parce que tu demande au proc de traiter 100 millions de system.out.print, ce qu'il fait, voui il les écrit, mais il a pas vraiment le temps de faire autre chose..... notemment s'occuper de la fenêre...
}

tu pourrais faire plutot :


if(e.getActionCommand().equals("details")) {
Thread deail = new Thread(new Runnable(){
final JFrame j = new JFrame();
public void run(){
j = cmd.afficherCommande();
while(pasFini){
Thread.sleep(500); // endor le thread pour une 1/2 secondes, les autres traitements
// on le temps de s'effectuer
}
// lorsque pasFini passe à faux et que detail se reveille, on passe ici ...
// Une fois le traitement termine on ferme la fenetre
j.setVisible(false);
}
}
});
}
// il te reste à trouver le moyen de basculer la valeur booléenne de pasFini ailleurs dans ton code ....
A+
Messages postés
4
Date d'inscription
dimanche 28 mars 2004
Statut
Membre
Dernière intervention
9 décembre 2005

WORA, comment je pourrais faire pour passer par un timer ou un thread. Tu veux dire que le processus de creation de la fenetre doit être fait dans un thread ?

Et sinon d'autre suggestions ?
Messages postés
5363
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
30 avril 2021
110
Salut,





pas forcement le processus de création de la fenetre mais plus le
traitement ce qui te permettrai de pouvoir afficher ta fenetre et en
meme temps de faire ton traitement comme ca la jvm ne bloquera pas pour
printer toute ta fenetre

WORA