IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Problème avec thread?


Sujet :

Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2015
    Messages : 11
    Points : 3
    Points
    3
    Par défaut Problème avec thread?
    je voudrais utiliser une action dans un thread pour que je n'ai pas à attendre que la requête soit terminée pour relâcher le bouton.

    ex:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 
     
     
    PreparedStatement stmt = null;
    String wql = "SELECT  FROM .........
    try {
     
     
    .........
     
        }catch( Exception  e){
      ............
    }

  2. #2
    Membre expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 340
    Points : 1 576
    Points
    1 576
    Par défaut
    Bonjour,

    c'est un peu vague comme question...
    Quel genre de traitement voudriez-vous faire (dans le bloc try{} je suppose) ?
    - du long terme, genre avec défilement d'un bargraphe ?
    - un truc tout cours, genre afficher une boite d'attente ?

    Je suppose que le problème que vous semblez indiquer, est que le bouton reste enfoncé (graphiquement), tant que le programme ne sors pas de la boucle de traitement ?
    @ bientôt...

    Salut & @+ sur 3W!

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2015
    Messages : 11
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par rtg57 Voir le message
    Bonjour,

    c'est un peu vague comme question...
    Quel genre de traitement voudriez-vous faire (dans le bloc try{} je suppose) ?
    - du long terme, genre avec défilement d'un bargraphe ?
    - un truc tout cours, genre afficher une boite d'attente ?

    Je suppose que le problème que vous semblez indiquer, est que le bouton reste enfoncé (graphiquement), tant que le programme ne sors pas de la boucle de traitement ?
    Bonjour,
    oui c'est cela. Select etait un exemple je veux l'applique pur une suppression de ligne de table avec sql.

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    C'est peu commun comme pratique : c'est plutôt l'inverse qu'on cherche à faire, c'est-à-dire ne pas bloquer l'UI pendant le temps de la action (c'est ce qu'il se passe par défaut quand on exécute du code directement dans le thread graphique). Par défaut, le bouton reste armé tant que l'actionPerformed n'a pas rendu la main. Maintenant, si la requête s'exécute dans un SwingWorker, on peut armer le bouton, mais il restera cliquable (donc désarmable à priori). Si le but est d'empêcher quelqu'un de relancer la requête, il est plus simple de le rendre disabled (button.setEnabled(false)), et plus standard.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2015
    Messages : 11
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Salut,

    C'est peu commun comme pratique : c'est plutôt l'inverse qu'on cherche à faire, c'est-à-dire ne pas bloquer l'UI pendant le temps de la action (c'est ce qu'il se passe par défaut quand on exécute du code directement dans le thread graphique). Par défaut, le bouton reste armé tant que l'actionPerformed n'a pas rendu la main. Maintenant, si la requête s'exécute dans un SwingWorker, on peut armer le bouton, mais il restera cliquable (donc désarmable à priori). Si le but est d'empêcher quelqu'un de relancer la requête, il est plus simple de le rendre disabled (button.setEnabled(false)), et plus standard.
    Salut,
    je préfererais avec thread.

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par trianon23 Voir le message
    Salut,
    je préfererais avec thread.
    Tu veux dire SwingWorker.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2015
    Messages : 11
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Tu veux dire SwingWorker.
    Je voudrais faire un thread

    Je ne veux pas attendre que la requête soit terminée pour relâcher le bouton. Car mon il reste appuyé et je peux plus rien faire sur mon interface graphique. Elle deviens blanche et ne fait plus rien.
    donc je veux faire dans l'action un Thread séparé pour éviter ce genre de bug.

    Mon code est de la forme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 
     
     
     
    String wql = "Delete  FROM .........
    try {
     
     
    .........
     
        }catch( Exception  e){
      ............
    }

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par trianon23 Voir le message
    Je voudrais faire un thread

    Je ne veux pas attendre que la requête soit terminée pour relâcher le bouton. Car mon il reste appuyé et je peux plus rien faire sur mon interface graphique. Elle deviens blanche et ne fait plus rien.
    donc je veux faire dans l'action un Thread séparé pour éviter ce genre de bug.
    C'est justement ce à quoi sert un SwingWorker, qui utilise un thread.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    jButton1.setEnabled(false); // le bouton devient inactif, on ne peut pas lancer un delete pendant un delete
     
    new SwingWorker<Object, Object>() {
     
        @Override
        public Object doInBackground() {
             // ici tu fais ton delete
    	 return null; // si c'était une requête qui récupérait un résultat on pourrait retourner ici ce résultat
        }
     
        @Override
        protected void done() {
            // ici tu peux mettre à jour ton interface 
    	jButton1.setEnabled(true); // on réactive le bouton
        }
    }.execute();
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2015
    Messages : 11
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    C'est justement ce à quoi sert un SwingWorker, qui utilise un thread.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    jButton1.setEnabled(false); // le bouton devient inactif, on ne peut pas lancer un delete pendant un delete
     
    new SwingWorker<Object, Object>() {
     
        @Override
        public Object doInBackground() {
             // ici tu fais ton delete
    	 return null; // si c'était une requête qui récupérait un résultat on pourrait retourner ici ce résultat
        }
     
        @Override
        protected void done() {
            // ici tu peux mettre à jour ton interface 
    	jButton1.setEnabled(true); // on réactive le bouton
        }
    }.execute();


    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec threads après mise à jour
    Par issoram dans le forum Modules
    Réponses: 2
    Dernier message: 20/05/2009, 12h18
  2. Problème avec Thread et NotifyAll()
    Par Florianter dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 01/01/2009, 21h39
  3. Probléme avec Thread
    Par infoelectronique dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 06/10/2008, 14h48
  4. Problème avec Thread
    Par demcoul dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 16/03/2007, 11h53
  5. Problème avec Thread
    Par halic dans le forum C#
    Réponses: 2
    Dernier message: 08/02/2007, 14h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo