[ALG2ir] finalize pas appelé ?

Voir le sujet précédent Voir le sujet suivant Aller en bas

[ALG2ir] finalize pas appelé ?

Message  jonas le Dim 30 Mai 2010, 21:57

Dans le cadre du TD5 où il s'agit de loguer les actions des poules,
je crée une classe avec dans le constructeur une ouverture d'un FileWritter

Code:

      this.fwLog = null;

      try
      {
         fwLog = new FileWriter(new File(log));
         System.out.println("fichier log ouvert");
      }
      catch(IOException ioe)
      {
         System.err.println("Pas pu ouvir le fichier ("+ioe+")");
      }

et dans le destructeur j'ai mis

Code:

   public void finalize()
   {
      System.out.println("delete de environnement");
      try
      {
         fwLog.flush();
         fwLog.close();
         System.out.println("fichier log fermé");
      }
      catch(IOException ioe)
      {
         System.err.println("Pas pu fermer le fichier (" + ioe + ")");
      }
   }

Durant le jeu les poules appellent la fonction suivante :

Code:

public void addToLog(String entry)
   {
      synchronized("LockLog")
      {   if (fwLog != null)
         {
            try
            {
               fwLog.write(entry + System.getProperty("line.separator") );
               System.out.println("Entrée ajoutée au log");
               fwLog.flush(); //(RAJOUTÉ POUR DEBUG)
            }
            catch(IOException ioe)
            {
               System.err.println("Pas pu ajouter l'entrée (" + ioe + ")");
            }
         }
      }
   }

Hors, il semblerait qu'à la fermeture de mon programme, la fonction FINALIZE ne soit pas appelée car le fichier n'est pas "flushé" (et sans-doute pas fermé) --> le fichier log reste vide, et les String de debug du Finalize ne sont pas affichée.

J'ai actuellement rajouté un FLUSH dans la fonction "addToLog" mais ce n'est pas très propre et le fichier n'est probablement jamais fermé...

Cette class est créée depuis le MAIN qui crée ensuite la fenêtre GUI.

le programme est fermé depuis la GUI le paramètre de fermeture étant
Code:
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
ou
Code:
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);

Si quelqu'un peut m'aiguiller...

jonas

Nombre de messages : 234
Prénom : Jonathan
Statut : Ancien industrialisé
Localisation : Devant son clavier BÉPO !
Date d'inscription : 29/09/2008

http://www.xax.be

Revenir en haut Aller en bas

Re: [ALG2ir] finalize pas appelé ?

Message  mcd le Dim 30 Mai 2010, 22:15

Je n'ai peut-être pas tout compris mais tu pourrais t'en sortir en n'utilisant pas le "setDefaultCloseOperation" mais en donnant une méthode à toi (celle qui ferme le fichier + exit) quand l'évenement "fermeture de la fenêtre" survient.

mcd

Nombre de messages : 1548
Prénom : Marco
Statut : prof
Localisation : Molenbeek
Date d'inscription : 29/09/2006

http://mcd.namok.be

Revenir en haut Aller en bas

Re: [ALG2ir] finalize pas appelé ?

Message  jonas le Dim 30 Mai 2010, 22:26

Merci pour l'idée Smile

Toutefois, la fenêtre GUI qui affiche les poules, étant indépendante de la classe qui écrit dans le fichier log, j'aurais préféré que la fenêtre GUI n'ai pas à s'occuper du fichier log.

Mon problème semble venir du fait que lorsque la fenêtre GUI est fermée, l'application se ferme sans faire appel aux destructeurs des classes créées dans le main (enfin là je faits des hypothèses...).

J'avais d'abord pensé m'occuper de l'ouverture et de la fermeture du fichier log dans la fonction MAIN du programme, mais je ne sais pas comment dire au MAIN "attends que la fenêtre GUI soit fermée (= jeu terminé) et ensuite ferme le fichier log"

jonas

Nombre de messages : 234
Prénom : Jonathan
Statut : Ancien industrialisé
Localisation : Devant son clavier BÉPO !
Date d'inscription : 29/09/2008

http://www.xax.be

Revenir en haut Aller en bas

Re: [ALG2ir] finalize pas appelé ?

Message  pbt le Dim 30 Mai 2010, 22:39

Ce qu'induit mcd c'est que lorsque tu fermes ta fenêtre GUI, tu fait un exit ce qui termine évidemment le tout. Si tu veux comme l'induit mcd (mais je l'ai déjà dit ;-) ) tu peux t'arranger pour que ton thread log écoute la fermeture de la fenêtre GUI ... et se charge alors de fermer proprement le tout.

_________________
smartq.namok.be · faq ·  · IRC / irc.freenode.net #esi · blog.namok.be
style #pbt {heigth:189cm; weight:79kg; eye-color:#524000; hair:very short; dead pixels: some; }

pbt
Admin

Nombre de messages : 4862
Age : 45
Prénom : Pierre
Statut : prof
Localisation : La cité des géants
Date d'inscription : 24/11/2005

http://esi.namok.be

Revenir en haut Aller en bas

Re: [ALG2ir] finalize pas appelé ?

Message  jonas le Lun 31 Mai 2010, 08:46

ok. merci à vous.

jonas

Nombre de messages : 234
Prénom : Jonathan
Statut : Ancien industrialisé
Localisation : Devant son clavier BÉPO !
Date d'inscription : 29/09/2008

http://www.xax.be

Revenir en haut Aller en bas

Re: [ALG2ir] finalize pas appelé ?

Message  Contenu sponsorisé Aujourd'hui à 10:58


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum