Attente java

Fermé
cedlapinte Messages postés 12 Date d'inscription samedi 16 janvier 2010 Statut Membre Dernière intervention 7 octobre 2016 - 16 janv. 2010 à 16:33
cedlapinte Messages postés 12 Date d'inscription samedi 16 janvier 2010 Statut Membre Dernière intervention 7 octobre 2016 - 18 janv. 2010 à 19:32
Bonjour,
j'ai un petit probleme, je veux realiser une interface java et j'aimerais que lorsque j'appuie sur un bouton le message "j'ai faim" s affiche pendant 3 secondes et apres le message devient "je n'est plus faim". J'ai utiliser :
try{
Thread.sleep(3000);
}catch(InterruptedException e){}
Le probleme est que à l affichage il y a le message "je n'est plus faim" qui s affiche apres 3 secondes mais avant je n'est rien qui s'affiche. Je ne vois pas quoi changer
A voir également:

11 réponses

BadGuitarist Messages postés 367 Date d'inscription dimanche 12 octobre 2008 Statut Membre Dernière intervention 20 octobre 2013 27
16 janv. 2010 à 17:15
Bonjour,
Et si tu inverses les instructions :

Affichage "J'ai faim"
Thread.sleep(3000);
Affichage "Je n'ai plus faim"
Thread.sleep(3000);
Affichage "" // effacer la zone d'infos
0
cedlapinte Messages postés 12 Date d'inscription samedi 16 janvier 2010 Statut Membre Dernière intervention 7 octobre 2016
16 janv. 2010 à 18:14
Pour etre plus precis voila ce que jai fait :

public void actionPerformed(ActionEvent evt) {
Object source = evt.getSource();
if(source == boutonMiseEnMarche) {
labelEtat.setText("<html><center>J'ai faim</center></html>");
try{
Thread.sleep(3000);
}
catch(InterruptedException e){}
labelEtat.setText("Je n'est plus faim");
}
0
BadGuitarist Messages postés 367 Date d'inscription dimanche 12 octobre 2008 Statut Membre Dernière intervention 20 octobre 2013 27
16 janv. 2010 à 20:42
Ton code m'étonne car tu sembles mélanger 2 technologies.
Excuse-moi pour les remarques et questions que je fais : je ne cherche qu'à comprendre :

D'un côté :
  actionPerformed(ActionEvent evt) <=> tu utilises une technologie AWT/SWING

De l'autre, pour affecter le libellé de ton bouton, tu utilises une technologie Web HTML
  labelEtat.setText("<html><center>J'ai faim</center></html>");


Je pense que tu es dans un environnement Web : J2EE mais je n'en suis pas sûr.
Peux-tu confirmer ou infirmer, STP.
0
cedlapinte Messages postés 12 Date d'inscription samedi 16 janvier 2010 Statut Membre Dernière intervention 7 octobre 2016
16 janv. 2010 à 22:04
tu a raison je suis dans un environnement Web : J2EE ; mais le java n'est pas mon fort.
En ce qui concerne : "labelEtat.setText("<html><center>J'ai faim</center></html>");" j'ai utilisée cette methode pour manipuler facilement le texte dans le label (pouvoir ecrire sur plusieurs lignes, centrer le texte) j'ai trouvée cette methode plus simple
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BadGuitarist Messages postés 367 Date d'inscription dimanche 12 octobre 2008 Statut Membre Dernière intervention 20 octobre 2013 27
16 janv. 2010 à 23:32
En J2EE, tu pouvais passer par Javascript pour modifier lelabel du bouton sur l'évènement onclick().

Ensuite pour changer de message au bout de 3 secondes, tu fais appel à la fonction Javascript window.setTimeout(uneFonctionAAppeler, 3000)

Voici un exemple (que je viens de faire et que j'ai testé) pour te montrer ce qu'il est possible de faire et qui ressemble (si j'ai bien compris) à ce que tu veux faire :

  <html>
    <head>
      <script language="javascript" type="text/javascript"> 
        function changerLabelBouton1()
        {
          document.getElementById("idBouton1").value="Je n ai plus faim";
          window.setTimeout(changerLabel2Bouton1, 3000);
        }
        function changerLabel2Bouton1()
        {
          document.getElementById("idBouton1").value="Je digère ...";
        }
      </script>
  </head>
    <body>
      <input type="button" value="J ai faim" id="idBouton1" onclick="changerLabelBouton1()" ></input>
    <body>
  </html>
  


0
cedlapinte Messages postés 12 Date d'inscription samedi 16 janvier 2010 Statut Membre Dernière intervention 7 octobre 2016
17 janv. 2010 à 13:54
dans mon programme je n'utilise pas le langage HTML (a part pour remplacer des System.out.println("Blablabla")). Moi je voudrais l'équivalent de ton : window.setTimeout(changerLabel2Bouton1, 3000); en langage JAVA
0
BadGuitarist Messages postés 367 Date d'inscription dimanche 12 octobre 2008 Statut Membre Dernière intervention 20 octobre 2013 27
17 janv. 2010 à 14:03
Bonjour,

Recherche cela : Thread.
0
cedlapinte Messages postés 12 Date d'inscription samedi 16 janvier 2010 Statut Membre Dernière intervention 7 octobre 2016
17 janv. 2010 à 14:04
j'ai deja essayer et rien n'a marche je ne comprend pas trop le threads
0
BadGuitarist Messages postés 367 Date d'inscription dimanche 12 octobre 2008 Statut Membre Dernière intervention 20 octobre 2013 27
17 janv. 2010 à 14:11
Si tu veux implémenter ta solution en n'utilisant que Java, il faudra bien passer par les Thread.

Donne-moi ce que tu as fais pour implémenter cette gestion de libellé (version avec les Thread) pour que je jette un coup d'oeil.
0
cedlapinte Messages postés 12 Date d'inscription samedi 16 janvier 2010 Statut Membre Dernière intervention 7 octobre 2016
17 janv. 2010 à 15:08
Je te laisse la partie de code concernée par mon probleme. Avan ce code j'ai créer la fenetre contenant kes boutons et labels de mon interface graphique.

public void actionPerformed(ActionEvent evt) {
Object source = evt.getSource();
if(source == boutonMiseEnMarche) {
boutonMiseATable.setEnabled(true); // Rend le boutonMiseATable actif
boutonSortieDeTable.setEnabled(true); // Rend le boutonSortieDeTable actif
boutonMiseATable.addActionListener(this); // Met le boutonMiseATable en écoute
boutonSortieDeTable.addActionListener(this); // Met le boutonSortieDeTable en ecoute
/* je veux que les 2 lignes de texte suivantes s'affichent pendant 3 secondes lorsque j'appuie sur le boutonMiseEnMarche*/
labelCompteRendu.setText("<html><center>Bonjour je suis Bill</center></html>");
labelEtat.setText("<html><center>Je suis dans mon état normal <br> Je n'est pas faim, je ne pleure pas</center></html>");
/* Apres ces 3 secondes je veux faire labelEtat.setText("<html><center>J'ai faim</center></html>"); qui s'affiche pendant 2 secondes*/
boutonMiseEnMarche.setEnabled(false); // Rend le boutonMiseEnMarche inactif
}
else if(source == boutonMiseATable) {
labelEtat.setText("Bill est à table");
}
else if(source == boutonSortieDeTable) {
labelEtat.setText("Bill n'est plus à table");
}
}

/* Je pense qu'il faut utiliser la partie suivante mais je nesais pas comment*/
/* public class Temporisation extends Thread {
int TempsDAutonomie;

public Temporisation (int temps) {
this.TempsDAutonomie = temps;
}

private void Attente(int i) throws InterruptedException {
this.TempsDAutonomie = i;
this.start ();
this.wait(i);

}

}*/
0
cedlapinte Messages postés 12 Date d'inscription samedi 16 janvier 2010 Statut Membre Dernière intervention 7 octobre 2016
18 janv. 2010 à 19:32
j'ai essayé thread.sleep(); mais sa n'a pas marché
0