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

avec Java Discussion :

probleme avec une variable


Sujet :

avec Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 53
    Points : 35
    Points
    35
    Par défaut probleme avec une variable
    Bonjour tout le monde,
    j'ai un problème et j'espère que vous allez m'aider.
    voila ce que je veux faire :
    je veux dans le main instancier une classe "parcourir" qui nous aide a choisir un fichier
    puis après je veux récupérer le path de ce fichier dans une variable globale "fichierPath" mais le problème c'est que une fois que je lance mon programme fichierPath est affecté avec null avant que je choisisse un fichier.auriez vous une idée sur le problème ??
    voila la classe parcourir
    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
    import javax.swing.*;
    import java.awt.GridLayout;
    import java.awt.event.ActionListener; 
    import java.awt.event.ActionEvent;
     
    public  class parcourir {
    	private String fichierPath;
    	public String getFichierPath(){
    		return fichierPath;
    	}
     
    	// Méthode de choix d'un fichier
    	public void choisir() {
    	// Crée un panneau
    	JPanel contenuFenêtre = new JPanel();
     
    	// Affecte un gestionnaire de présentation à ce panneau
    	GridLayout disposition = new GridLayout(4,2);
    	contenuFenêtre.setLayout(disposition);
    	// Crée les contrôles en mémoire
     
     
    	// Ajoute les contrôles au panneau
    	// Crée le cadre et y ajoute le panneau
    	JFrame cadre = new JFrame("Boutton parcourir");
    	cadre.setContentPane(contenuFenêtre);
     
    	// Affecte ses dimensions à la fenêtre et la rend visible
    	cadre.setSize(400,100);
    	cadre.setVisible(true);
     
    	JButton lancer = new JButton("parcourir");
    	contenuFenêtre.add(lancer);
    	lancer.addActionListener( new ActionListener() {
        public void actionPerformed(ActionEvent e){
            JFileChooser chooser = new JFileChooser();
            int returnVal = chooser.showOpenDialog(chooser);
            if(returnVal == JFileChooser.APPROVE_OPTION) {
               System.out.println("Vous avez choisi le fichier : " +
                    chooser.getSelectedFile().getName());
               		fichierPath = chooser.getSelectedFile().getPath();
     
        }
     
        }
    } );
     
     
     
     
    }
     
    }

    voila mon main


    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
    import java.util.*;
     
     
     
     
     
     
    public class mainFen {
     
    	public static void main (String args[])
    	{ 
     
     
    		parcourir fen = new parcourir() ;	
    	    fen.choisir();
    	    System.out.println("ma valeur est "+ fen.getFichierPath());
    	    //System.out.println("je suis " + xxx);
     
    	}
     
    }

  2. #2
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 39
    Points : 23
    Points
    23
    Par défaut
    Bonjour,

    Tu n'as pas essayé d'utiliser chooser.getCurrentDirectory() au lieu de chooser.getSelectedFile().getPath();, bon ça retourne un type File il faut faire attention mais tu récupères le chemin absolu là ou se trouve ton JChooserFile. Après il faut voir avec un toString ou ce genre de chose.

    En espérant que ça t'éclaire.

  3. #3
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 39
    Points : 23
    Points
    23
    Par défaut
    Je me permets de rajouter tout de suite au lieu d'éditer ma réponse même si c'est pas très propre (mea culpa les modos).

    Ton problème vient du fait que t'affiches ton Path alors que tu n'as même pas appuyé sur le bouton parcourir.
    Quand t'appelles le constructeur, ton attribut n'a pas encore de valeur! il prend un valeur qu'à partir du moment ou t'appuyes sur le bouton, donc il est normal que t'ai un null

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 60
    Points : 52
    Points
    52
    Par défaut
    Je n'ai pas très bien compris le problème, mais c'est normal qu'avant que tu choisisses un fichier ta variable fichierPath soit nulle vu que tu l'affectes seulement après avoir choisi un fichier.

    Si tu veux une valeur par défaut varParDefaut, remplace ta déclaration de variable par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private String fichierPath = varParDefaut;

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 53
    Points : 35
    Points
    35
    Par défaut
    merci pour vos réponse s
    bon j'explique encore plus
    dans le main a ce qui parait System.out.println("ma valeur est "+ fen.getFichierPath()); s'execute avant que je ne choisisse un fichier
    alors je voudrais que ces instructions qui suivent ne s'exécutent qu'apres le choix d'un fichier c'est à dire apès que fen.getFichierPath() soit affecté par le chemin du fichier
    j'espère avoir été plus clair

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 53
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par ralek Voir le message
    Je me permets de rajouter tout de suite au lieu d'éditer ma réponse même si c'est pas très propre (mea culpa les modos).

    Ton problème vient du fait que t'affiches ton Path alors que tu n'as même pas appuyé sur le bouton parcourir.
    Quand t'appelles le constructeur, ton attribut n'a pas encore de valeur! il prend un valeur qu'à partir du moment ou t'appuyes sur le bouton, donc il est normal que t'ai un null
    oui j'ai compris le problème. pourriez vous me proposer une solution ?

  7. #7
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 39
    Points : 23
    Points
    23
    Par défaut
    C'est simple, tu ne fais pas de System.out.println() dans ton main. Tu le mets dans ton constructeur. Tu le mets à la suite de l'affection de ton attribut.
    Mais si tu veux absolument ton getFichierPath, là ça va être un peut plus compliqué, c'est à dire que tant que tu n'as pas appuyé sur parcourir, il va être nul. Après comme a dit Androidisme, tu peux lui affecter une valeur par défaut, par exemple le path par défaut du JFileChooser.

  8. #8
    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
    Citation Envoyé par skouza Voir le message
    oui j'ai compris le problème. pourriez vous me proposer une solution ?
    les deux possibilités sont

    1) rendre la JFrame modal, et attendre qu'elle aie fini de s'afficher. Dans la JFrame, au niveau du listener, quand le fichier est choisi, cacher la JFrame http://www.developpez.net/forums/d26...enetre-modale/

    2) mettre le code qui doit se faire au moment du choix d'un fichier dans le listener.

  9. #9
    Membre actif
    Homme Profil pro
    Consultant BigData
    Inscrit en
    Juillet 2009
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant BigData

    Informations forums :
    Inscription : Juillet 2009
    Messages : 129
    Points : 280
    Points
    280
    Par défaut
    Ta variable fichierPath est déclarée dans ta classe mais n'est pas affectée avant que tu ne choisisses ton fichier. C'est donc normal de se retrouver avec un null.

    Il faut donc initialiser ta variable ou contourner ce problème :
    1. Tu initialise ta variable à la déclaration :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      private String fichierPath = "valeur par défaut";
    2. Tu initialise ta variable dans le constructeur
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
       
      public class Parcourir {
        public Parcourir() {
          this.fichierPath = "valeur par défaut";
        }
      }
    3. Tu test que la variable est initialisée avant de l'utiliser
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
       
      String path = fen.getFichierPath();
      if(path != null) {
        System.out.println("ma valeur est "+ path);
      }


    edit : je viens de remarquer, mais tu devrais utiliser une majuscule dans le nom de ta classe "parcourir"

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 53
    Points : 35
    Points
    35
    Par défaut
    Merci a vous vous m'avez vraiment beacoup aidé

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

Discussions similaires

  1. Probleme avec une variable
    Par julien2333 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 03/07/2008, 14h57
  2. probleme avec une variable dans l'action
    Par you.baddi dans le forum Struts 1
    Réponses: 1
    Dernier message: 08/04/2008, 13h56
  3. Réponses: 2
    Dernier message: 28/06/2006, 15h56
  4. [POO] Problème avec une variable static
    Par grimsk dans le forum Langage
    Réponses: 5
    Dernier message: 23/05/2006, 01h58
  5. probleme avec une variable globle externe...
    Par bountykiller dans le forum C++
    Réponses: 3
    Dernier message: 11/03/2006, 13h26

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