Problem thread java
saghir
Messages postés
13
Statut
Membre
-
Utilisateur anonyme -
Utilisateur anonyme -
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
}
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:
- Problem thread java
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Waptrick java voiture - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
4 réponses
Salut,
On ne plante pas, mais on ne sort jamais de la boucle while(true){ de la méthode s()
Cordialement,
Dan
On ne plante pas, mais on ne sort jamais de la boucle while(true){ de la méthode s()
Cordialement,
Dan
Salut,
Bon j'ai modifié to programme comme ci-dessous:
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
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
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.
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