Problème avec actionperformed

cyberval Messages postés 4 Date d'inscription dimanche 28 mars 2004 Statut Membre Dernière intervention 9 décembre 2005 - 8 déc. 2005 à 20:46
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 - 10 déc. 2005 à 00:14
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

Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
8 déc. 2005 à 22:06
Salut,



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

WORA
0
jcodeunpeu Messages postés 365 Date d'inscription mercredi 9 novembre 2005 Statut Membre Dernière intervention 2 décembre 2006 2
9 déc. 2005 à 10:36
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+
0
cyberval Messages postés 4 Date d'inscription dimanche 28 mars 2004 Statut Membre Dernière intervention 9 décembre 2005
9 déc. 2005 à 20:51
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 ?
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
10 déc. 2005 à 00:14
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
0
Rejoignez-nous