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

EDT/SwingWorker Java Discussion :

SwingWorker + fermeture de programme


Sujet :

EDT/SwingWorker Java

  1. #1
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2011
    Messages : 50
    Points : 42
    Points
    42
    Par défaut SwingWorker + fermeture de programme
    Bonjour,

    A la fermeture de mon programme (le actionOnCloseForm) lance un swingWorker pour sauvegarder le travail (sur un serveur distant).
    si je ne bloque pas le programme principale avec un get() la sauvegarde ne se termine pas.
    seulement lorsque je bloque avec le get() la progressbar ne fonctionne plus.

    Je pense que mon approche est mauvaise, mais je ne sais pas comment gérer proprement l'attente de fin de traitement d'un thread pour quitter l'appli?

    Si quelque a un méthode, je prends.
    merci

  2. #2
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 711
    Points : 4 797
    Points
    4 797
    Par défaut
    si je ne bloque pas le programme principale avec un get()

    Tu peux mettre le code ???
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  3. #3
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Et c'est quoi le "actionOnCloseForm"? Ca viens d'où ça?

    Si l'application se ferme, c'est probablement parce que tu as mis le default close operation de ta JFrame à EXIT_ON_CLOSE.

  4. #4
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2011
    Messages : 50
    Points : 42
    Points
    42
    Par défaut
    Desolé pour le actioncloseform voici le code de de la clase qui etand WindowsAdapter
    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
    17
    18
    19
    20
     
    public class ActionCloseForm extends WindowAdapter{
    private IntActionCloseForm act;  
        /**
         * Action a la fermeture de la Form qui doit implementer IntActionCloseForm
         *
         * @param act
         */
     
        public ActionCloseForm(IntActionCloseForm act) {
                    super();
                    this.act = act;
     
        }
        @Override
        public void windowClosing(WindowEvent e) {
                    act.actionOnCloseForm();
                    super.windowClosing(e);
        }
    }
    voici le code du controleur qui redefinit IntActionCloseForm

    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
    17
    18
           @Override
     
           public void actionOnCloseForm() {
                 System.out.println("Fermeture, on sauvegarde");
                 // mise a jour docSas du formulaire
                 try{
                        mapCtrlFormulaires.get(getTopComponent(vue.getPanFormulaire())).updateObjDoc();
                        modDoc.refraichObs(docCourant);
                        modLot.refraichObs(lotCourant);
                 } catch (Exception ex) { }
     
                 if (lotCourant != null && lotCourant.getDocs().size() > 0 && lotCourant.hasChanged()){
                        int  res = JOptionPane.showConfirmDialog(vue, "Des modifications ont été efectuées. Voulez vous sauvegarder avant de quitter?", "Quiter ?", JOptionPane.YES_NO_OPTION );
                        if (res == JOptionPane.YES_OPTION){
                               trt.sauvegarde(lotCourant, vue);
                        }
                 }
           }
    le code du trt.sauvegarde qui appelle le SwingWorker
    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
    17
           /**
           * Methode pour la sauvegarde des documents
           */
     
           public void sauvegarde(Lot lot, JFrame dim){
                 // lance la fenetre de progression de la sauvegarde
                 FenProgressGen fen = new FenProgressGen(dim,"MIM - Sauvegarde des documents",false);
                 SwSaveLot sws = new SwSaveLot(lot,fen);
                 sws.execute();
                 try {
                        sws.get();
                 } catch (InterruptedException | ExecutionException e) {
                        JOptionPane.showMessageDialog(vue,"Une erreur s'est produite lors de la sauvegarde du lot dans la bas SAS de Mim Gv7","Erreur sauvegarde",JOptionPane.ERROR_MESSAGE);
                        log.info("erreur sauvegarde du lot");
                        log.error(e);
     
                 }
    Je suis désolé, mon poste de travail n’étant pas raccordé a internet, je galère un peu pour montrer des exemple de code.
    Merci.

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Et il est où le code qui ferme l'application dans l'histoire?

  6. #6
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2011
    Messages : 50
    Points : 42
    Points
    42
    Par défaut
    pour moi, c'est
    dans le controleur de vue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vue.addWindowListner (new ActionCloseForm(this));
    puis dans ActionCloseForm

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        @Override
        public void windowClosing(WindowEvent e) {
                    act.actionOnCloseForm();
                    super.windowClosing(e);
        }
    J'avoue que j'ai fait ça l'an dernier et que je galère un peu a me retrouver dans toutes ces interactions

  7. #7
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2011
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2011
    Messages : 50
    Points : 42
    Points
    42
    Par défaut
    Désolé, j'ai pas correctement regardé
    C'est effectivement un setDefaultCloseOperation qui trainait dans la JFrame.
    Commenté, tout marche sans get() sauvegarde + progression.
    Merci et je m'excuse pour le dérangement.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 26/11/2006, 23h39
  2. Fermeture de programme
    Par janego dans le forum C++Builder
    Réponses: 2
    Dernier message: 31/07/2006, 19h06
  3. Fermeture du programme
    Par oasis_5 dans le forum Général Python
    Réponses: 11
    Dernier message: 08/03/2006, 11h28
  4. [c++] Plantage à la fermeture du programme
    Par Asmodean dans le forum C++
    Réponses: 5
    Dernier message: 21/02/2006, 13h20
  5. Réponses: 7
    Dernier message: 24/01/2005, 11h36

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