Problem thread java

Fermé
saghir Messages postés 8 Date d'inscription mardi 16 septembre 2008 Statut Membre Dernière intervention 12 octobre 2012 - 12 oct. 2010 à 18:03
 Utilisateur anonyme - 16 oct. 2010 à 09:25
Bonjour,


on clique en start l'application est plante


import javax.swing.*;


public class pointage extends JFrame {

public pointage() {
initComponents();
this.setVisible(true);
}

private void s() {
Thread sec = new Thread();
int cpt = 0;
while (true) {
try {
sec.sleep(1000);

} catch (Exception err) {
JOptionPane.showMessageDialog(null, err);
}
lCpt.setText(String.valueOf(cpt++));
}
}




@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {

jButton1 = new javax.swing.JButton();
lCpt = new javax.swing.JLabel();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setBackground(new java.awt.Color(255, 255, 255));

jButton1.setText("start");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});

javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addGap(180, 180, 180)
.addComponent(jButton1)
.addContainerGap(223, Short.MAX_VALUE))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap(259, Short.MAX_VALUE)
.addComponent(lCpt, javax.swing.GroupLayout.PREFERRED_SIZE, 42, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(157, 157, 157))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
.addContainerGap(274, Short.MAX_VALUE)
.addComponent(lCpt, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(78, 78, 78)
.addComponent(jButton1)
.addGap(135, 135, 135))
);

pack();
}// </editor-fold>

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
JOptionPane.showMessageDialog(null, "heure");

s();
JOptionPane.showMessageDialog(null, "heure");

}

public static void main(String args[]) {
new pointage();
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JLabel lCpt;
// End of variables declaration

}
A voir également:

4 réponses

Utilisateur anonyme
12 oct. 2010 à 18:51
Salut,

On ne plante pas, mais on ne sort jamais de la boucle while(true){ de la méthode s()

Cordialement,

Dan
0
OUI C'EST VRAI MAIS LA VALEUR DE LABLE lCpt NE CHANGER PAS
0
choubaka Messages postés 39425 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 16 avril 2025 2 104
13 oct. 2010 à 20:43
il faut revoir la condition de la boucle ... d'où vient ce "true" ???
0
oui ta raison mais tantque en boucle l'aplication est plante tu as comprer ??!! et merci d'avance
0
Utilisateur anonyme
14 oct. 2010 à 18:32
Juste un petit test à faire:

Tout d'abord il faut enlever int cpt = 0; et le mettre dans les déclarations de variables private int cpt = 0; (je suppose qu'à terme ce compteur sera remplacé par l'heure).
Ajouter un break après lCpt.setText(String.valueOf(cpt++));
Supprimer aussi
s();
//JOptionPane.showMessageDialog(null, "heure"); <<<<<<<<<<<<<
dans ActionEvent
Et tu constateras que le label est mis à jour après chaque clique sur Start et OK de la boîte heure.

Ce qui montre (pour le moment) l'inutilité de la boucle while(true){
et même du sleep( et aussi du Thread, mais sans en abandonner l'idéeJuste un petit test à faire:

Tout d'abord il faut enlever int cpt = 0; et le mettre dans les déclarations de variables private int cpt = 0; (je suppose qu'à terme ce compteur sera remplacé par l'heure).
Ajouter un break après lCpt.setText(String.valueOf(cpt++));
Supprimer aussi
s();
//JOptionPane.showMessageDialog(null, "heure"); <<<<<<<<<<<<<
dans ActionEvent
Et tu constateras que le label est mis à jour après chaque clique sur Start et OK de la boîte heure.

Ce qui montre (pour le moment) l'inutilité de la boucle while(true){
et même du sleep( et aussi du Thread, mais sans en abandonner l'idée...)

Après ce test, si tu veux, on tentera de voir comment faire ce Thread.
0
saghir Messages postés 8 Date d'inscription mardi 16 septembre 2008 Statut Membre Dernière intervention 12 octobre 2012
15 oct. 2010 à 00:13
Merci danimo Je vous remercie de vos efforts et vous remercie pour votre peine et
Adhan, mais je n'ai pas me comprendre, je vais essayer d'expliquer l'idée plus
Le but ce JFrame (partie de l'application) Est-ce quand vous appuyez sur le bouton start le comptoir 0123 tantque boucle En cours
(Lorsque vous appuyez sur le bouton stop Contre arrêt, et cela plus tard)
et merci d'avance bien sur
0
Utilisateur anonyme
15 oct. 2010 à 20:59
Salut,

Bon j'ai modifié to programme comme ci-dessous:
   import javax.swing.*;
   import java.awt.event.*;


   public class Pointage extends JFrame { 
   
      public Pointage() { 
         initComponents(); 
         this.setVisible(true); 
      }
         
      @SuppressWarnings("unchecked") 
      // <editor-fold defaultstate="collapsed" desc="Generated Code"> 
      private void initComponents() { 
      
         jButton1 = new javax.swing.JButton(); 
         lCpt = new javax.swing.JLabel(); 
      
         setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 
         setBackground(new java.awt.Color(255, 255, 255)); 
      
         jButton1.setText("start"); 
         
         jButton1.addActionListener(
               new ActionListener() {
                  public void actionPerformed(ActionEvent e) {
                     jButton1.setEnabled(false);
                  // création du Thread d'exécution
                     Thread sec = 
                        new Thread()
                        {
                           public void run() {
                              //int cpt = 0; 
                              while (cpt != 41) { 
                                 try { 
                                    Thread.sleep(1000); 
                                 
                                 } 
                                    catch (Exception err) { 
                                       JOptionPane.showMessageDialog(null, err); 
                                    } 
                                 System.out.println("cpt = " + cpt);
                                 lCpt.setText(String.valueOf(cpt++)); 
                              }
                              cpt = 0;
                              jButton1.setEnabled(true);
                           }
                        };
                     sec.start();
                  }
               }
            );
      
         javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
         getContentPane().setLayout(layout); 
         layout.setHorizontalGroup( 
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
            .addGroup(layout.createSequentialGroup() 
            .addGap(180, 180, 180) 
            .addComponent(jButton1) 
            .addContainerGap(223, Short.MAX_VALUE)) 
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() 
            .addContainerGap(259, Short.MAX_VALUE) 
            .addComponent(lCpt, javax.swing.GroupLayout.PREFERRED_SIZE, 42, javax.swing.GroupLayout.PREFERRED_SIZE) 
            .addGap(157, 157, 157)) 
            ); 
         layout.setVerticalGroup( 
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() 
            .addContainerGap(274, Short.MAX_VALUE) 
            .addComponent(lCpt, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE) 
            .addGap(78, 78, 78) 
            .addComponent(jButton1) 
            .addGap(135, 135, 135)) 
            ); 
      
         pack(); 
      }// </editor-fold>
   
      public static void main(String args[]) { 
         new Pointage(); 
      }
      
   // Variables declaration - do not modify 
      private javax.swing.JButton jButton1; 
      private javax.swing.JLabel lCpt;
      private int cpt = 0;  // PENSER METTRE CPT ICI <<<<<<<<<<<<<<<<
   // End of variables declaration
   }


Pour l'instant, il fonctionne jusqu'à ce que cpt = 40.
On peut le modifier en ajoutant un bouton Stop, si tu veux on le fera après.

Tu remarqueras que lorsqu'on clique Start le bouton devient inactif, il redevient actif quand cpt arrive à 40 et on peut de nouveau faire une série de 40 en cliquant Start.

Cordialement,

Dan
0
merci merci merci danimo
0
saghir Messages postés 8 Date d'inscription mardi 16 septembre 2008 Statut Membre Dernière intervention 12 octobre 2012
16 oct. 2010 à 01:53
je vous remercie pour votre réponse et pour votre aide et aussi pour le temps que vous avez perdu à cause de moi
0
Utilisateur anonyme
16 oct. 2010 à 09:25
Je vois que je n'ai pas du tout perdu mon temps puisque tu sembles satisfait...

Il ne faut pas oublier que nous sommes sur un forum d'entraide et que personne n'est obligé de répondre aux appels à l'aide

Cordialement,

Dan.
0