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

Langage Java Discussion :

Problème d'initialisiation d'une variable


Sujet :

Langage Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 3
    Par défaut Problème d'initialisiation d'une variable
    Bonjour,

    Je réalise un programme permettant de surveiller des passerelles entre logiciel.
    Le but du soft est simple, vérifier si dans un dossier nous avons des fichier arrivant d'un autre soft si le nombre de fichier ne bouge pas cela veut dire que la passerelle ne fonctionne plus.

    pour cela j'ai créer une classe avec une methode qui me renvoie le nombre de fichier du répertoire. puis toutes les 5 sec (timer du thread qui lance la classe), je vérifie si le nombre de fichier à été modifié. Mon problème est le suivant j'initialise 2 variable au démarrage une lecture qui stock le nombre de fichier puis une autre lastLecture qui doit sauvegarder la derniére lecture je compare les 2 si == la passerelle et arrêter j'envoie un mail si != je met la variable lastLecture = lecture le problème c que à la fin de la methode, aprés avoir copier la valeurs de la dernière lecture ma variable ce réinitialise a 1 sont état de lancement ai lieu de garder la valeure copier de la derniére lecture. Merci pour votre aide je ne m'en sort pas malgré bcp de recherche, je viens juste de reprendre le dev Java dc j'ai oublié quelque rudiment du langage. (je vous met mon code)
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    // Classe effectuant le traitement ci-dessus.
    import java.io.*;
    import java.util.*;
     
    public class HprimLabo  {	
    	int resultatLecture = 0;
    	int lastLecture = 1 ;
    	int lecture =0;
     
    	int verificationFichier() throws FileNotFoundException{		 	 
    		 //Création des objets			 
    		 File file = new File ("c:/count"); //Instance File pour vérification du repertoire.
    		 //Fin création objet		 
    		 // Je teste si la ressource et dispo. !!! pour ressource réseau
    		 if (!file.exists())
    		     throw new FileNotFoundException(); //gestion execption si la ressource n'est pas up 
    		 resultatLecture = file.list().length;		 
    		 //System.out.println(resultatLecture);		  
    		 return (resultatLecture);
    	}
     
    	 //Methode appliquer
    	 void verifHprimeLabo() throws FileNotFoundException{		
    		 System.out.println(lastLecture);
    		 lecture = verificationFichier();
    		 System.out.println("lecture =  " +lecture);
     
    		 if (this.lecture == lastLecture){
    			 //System.out.println("Last lecture =  " +lastLecture);
    			 System.out.println("Last lecture = lecture ");
    			 //Envoie d'email la passerelle et tombé.
    			 SendMail alerte = new SendMail();
    			 alerte.envoyerMail();
    		 }		 
    		 if(lastLecture!= lecture){		 
    			 //System.out.println("Last lecture =  " +lastLecture);
    			 System.out.println("Last lecture != Lecture");
    			 lastLecture = this.lecture;
    			 System.out.println(this.lastLecture);
     
    		}
     
    	 }	
    }

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 3
    Par défaut Contournement du problème
    Bon j'ai contourné le pb en sauvegardant la lecture ds un fichier cf code
    Mais si quelqu'un veut m'expliquer le pb des variable c avec plaisir

    ++ Jul
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     
    import java.io.*;
    import java.util.*;
     
    public class HprimLabo  {	
    	int resultatLecture = 0;
    	int lastLecture = lireSauvegarde();
    	int lecture =0;
     
    	int verificationFichier() throws FileNotFoundException{		 	 
    		 //Création des objets			 
    		 File file = new File ("c:/count"); //Instance File pour vérification du repertoire.
    		 //Fin création objet		 
    		 // Je teste si la ressource et dispo. !!! pour ressource réseau
    		 if (!file.exists())
    		     throw new FileNotFoundException(); //gestion execption si la ressource n'est pas up 
    		 resultatLecture = file.list().length;		 
    		 //System.out.println(resultatLecture);		  
    		 return (resultatLecture);
    	}
     
    	void sauvegardeLastLecture() throws IOException{		
    		 FileOutputStream logHprimTxt = new FileOutputStream("c:/count/logData/log.txt",false);
    		 PrintStream ecrireFichier = new PrintStream(logHprimTxt);
    		 ecrireFichier.println(resultatLecture);
    		 ecrireFichier.close();
    		 logHprimTxt.close();		
    	}
     
    	int lireSauvegarde(){
    		InputStreamReader flog;
    		LineNumberReader llog;
    		String myLine = null;
    		int sauv = 0;
    		try{ 
    			flog = new InputStreamReader(new FileInputStream("c:/count/logData/log.txt"));
    			llog = new LineNumberReader(flog);
    			while ((myLine = llog.readLine()) != null) { 
    	                      // --- Affichage de la ligne lu depuis le fichier
    	                      System.out.println("Ligne : "+myLine);
    	                       sauv = Integer.parseInt(myLine);
    	                }
    	        }catch (Exception e){
    	               // --- Gestion erreur lecture du fichier (fichier non existant, illisible, etc.)
    	               System.err.println("Error : "+e.getMessage());
    	        }	        
    	        System.out.println(myLine);
    		return sauv;
     
    	}
     
    	 //Methode appliquer
    	 void verifHprimeLabo() throws IOException{	
    		 //lireSauvegarde();
    		 System.out.println(lastLecture);
    		 lecture = verificationFichier();
    		 System.out.println("lecture =  " +lecture);
     
    		 if (this.lecture == lastLecture){
    			 //System.out.println("Last lecture =  " +lastLecture);
    			 System.out.println("Last lecture = lecture ");
    			 //Envoie d'email la passerelle et tombé.
    			 SendMail alerte = new SendMail();
    			 alerte.envoyerMail();
    		 }		 
    		 if(lastLecture!= lecture){		 
    			 //System.out.println("Last lecture =  " +lastLecture);
    			 System.out.println("Last lecture != Lecture");
    			 //lastLecture = this.lecture;
    			 sauvegardeLastLecture();
    			 System.out.println(this.lastLecture);			 
    		}
     
    	 }	
    }

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    L'erreur dois se situer dans la manière dont tu appelle HprimLabo, tu crée probablement une nouvelle instance à chaque fois plutot que de réutiliser la même instance => à chaque "new" de nouveau des nouvelles valeurs.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 3
    Par défaut
    Merci beaucoup pour la rep effectivement mon manque de pratique ces 2 dernieres années mon fait ramolire le cerveau

    Merci pour votre boulot.

    Bon courage à vous.

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 24
    Par défaut
    Salam,

    Essaye de déclarer la variable qui te pose problème en variable static.

    Bon courage

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    @my128samuel: très mauvaise habitude de résoudre ses problèmes à coup de variables statiques

    @Jul87: n'oubliez pas le bouton

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 24
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    @my128samuel: très mauvaise habitude de résoudre ses problèmes à coup de variables statiques

    @Jul87: n'oubliez pas le bouton
    Salam,

    Pourquoi ne pas utiliser dans ce cas là une variable statique, cela résoudrait pourtant le problème ?

    Et avec votre expérience, quelle sont les conseils que vous pouvez donner concernant l'utilisation des variables statiques.

    Cordialement,

  8. #8
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Avec une variable static, la valeur est unique pour toute l'application. Je n'en vois pas l'intérêt ici. Au contraire cela peut même être dangereux : si tu surveille deux répertoire les valeurs vont s'écraser mutuellement.

    En règle général il vaut mieux éviter les variables statiques, mis à part dans quelques cas bien précis...

    a++

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    ca résoudrais le problème, mais ça le résoudrais mal. Typiquement, le nombre de fichiers dans un objet chargé de surveiller un répertoire, c'est lié à une instance, chaque instance surveillant son propre répertoire. Mettre une variable statique, c'est détacher la donnée de l'instance, ce qui n'a pas de sens si tu veux réutiliser correctement ton objet.

  10. #10
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2006
    Messages : 24
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    ca résoudrais le problème, mais ça le résoudrais mal. Typiquement, le nombre de fichiers dans un objet chargé de surveiller un répertoire, c'est lié à une instance, chaque instance surveillant son propre répertoire. Mettre une variable statique, c'est détacher la donnée de l'instance, ce qui n'a pas de sens si tu veux réutiliser correctement ton objet.
    Salam,

    Réponse claire et net, là je suis vraiment convaincu, je vous remercie sincèrement.

    Encore merci.

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/09/2006, 12h22
  2. problème de ddénomination d'une variable
    Par baudmail dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 28/04/2006, 12h52
  3. Problème d'appels d'une variable entre fonctions
    Par julien.nasser dans le forum MFC
    Réponses: 12
    Dernier message: 26/04/2006, 09h23
  4. Problème de restitution d'une variable.
    Par flyflo dans le forum C++
    Réponses: 4
    Dernier message: 22/01/2006, 15h10
  5. Réponses: 1
    Dernier message: 21/12/2005, 19h08

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