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

Agents de placement/Fenêtres Java Discussion :

Probléme avec JFileChooser


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 287
    Par défaut Probléme avec JFileChooser
    Bonjour à tous,

    Je suis en train de développer une petite application en java, et j'ai une erreur avec un JFileChooser...
    Je ne comprend vraiment pas pourquoi le code bug, le peu qu'il y a ne me parait pas incorrect.

    Voilà le code de ma classe
    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
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
     
     
    import java.awt.Color;
    import java.awt.GridBagConstraints;
    import java.awt.GridBagLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.File;
     
    import javax.swing.BorderFactory;
    import javax.swing.JButton;
    import javax.swing.JFileChooser;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    import javax.swing.SwingUtilities;
    import javax.swing.UIManager;
    import javax.swing.UnsupportedLookAndFeelException;
     
    public class Fenetre extends JFrame {
     
    	private JPanel jContentPane;
    	private JLabel jLabelFichier;
    	private JTextField jTextFieldAdresseDBF;
    	private JButton jButton;
     
    		public Fenetre(){
    			//Théme de la fenetre (ici Windows XP)
    			String lnfName = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
    			try {
    				UIManager.setLookAndFeel(lnfName);
    				SwingUtilities.updateComponentTreeUI(this);
    			} 
    			catch (ClassNotFoundException e) {e.printStackTrace();} 
    			catch (InstantiationException e) {e.printStackTrace();} 
    			catch (IllegalAccessException e) {e.printStackTrace();}
    			catch (UnsupportedLookAndFeelException e) {e.printStackTrace();}
     
    			//Attributs de la fenêtre
    			this.setSize(300, 150);
    			this.setTitle("Mise aux normes fichier DBF");
    			this.setResizable(true);
    			this.setLocationRelativeTo(null); //Postionnement au centre
    			this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Fermeture lorsque l'on clique sur la croix
    			this.setContentPane(getJContentPane()); //déclaration du contentPane
     
    			//Attribut du content pane
    			jContentPane.setBackground(Color.decode("#A3CCED")); //Modification de l'écran de fond
     
     
    			//Configuration du Jpanel
    			jContentPane.setBorder(BorderFactory.createTitledBorder("Sélection du fichier"));
    			jContentPane.setLayout(new GridBagLayout());
    			jContentPane.setBackground(Color.decode("#A3CCED"));
    			jContentPane.setVisible(true);
     
    			//Configuration du layout
    			GridBagConstraints gbcMajZip = new GridBagConstraints();
    			gbcMajZip.anchor = GridBagConstraints.BASELINE_LEADING;
     
    			//Configuration des composants
    			jLabelFichier = new JLabel("Fichier");
    			jTextFieldAdresseDBF = new JTextField(15);
    			jButton = new JButton("Sélection");
     
    			//Ajout des composants 
    			jContentPane.add(jLabelFichier);
    			jContentPane.add(jTextFieldAdresseDBF);
    			jContentPane.add(jButton);
     
    			this.setVisible(true);
     
    			//Listener
    			jButton.addActionListener(new jButtonListener());
     
    		}
     
    		 private JPanel getJContentPane() {
    			    if (jContentPane == null) {
    			         jContentPane = new JPanel();
    			    }
    			    return jContentPane;
    		}
     
    		 /**
                     * classe qui écoute notre bouton du fichier dbf
                     */
    		 class jButtonListener implements ActionListener{
    			 public void actionPerformed(ActionEvent arg0){
    				 JFileChooser jFileChooser = new JFileChooser(); 
    				 jFileChooser.setApproveButtonText("OK");
    		 		 jFileChooser.setVisible(true);
    		 		 jFileChooser.setSelectedFile(new File(""));
    		 		if (jFileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION){	
    		 			//adresseMAJZip = (jFileChooserMAJZip.getSelectedFile().getAbsolutePath()); 
    		 			jTextFieldAdresseDBF.setText((jFileChooser.getSelectedFile().getAbsolutePath()));
    		 		}
    		 	}
    		 } 
     
     
     
     
    }
    Et voici l'erreur retournée lors de l'éxecution de ma classe main (qui instancie un nouvel objet Fenetre).

    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
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    	at javax.swing.ImageIcon.<init>(ImageIcon.java:161)
    	at javax.swing.ImageIcon.<init>(ImageIcon.java:147)
    	at sun.swing.WindowsPlacesBar.<init>(WindowsPlacesBar.java:82)
    	at com.sun.java.swing.plaf.windows.WindowsFileChooserUI.updateUseShellFolder(WindowsFileChooserUI.java:508)
    	at com.sun.java.swing.plaf.windows.WindowsFileChooserUI.installComponents(WindowsFileChooserUI.java:190)
    	at javax.swing.plaf.basic.BasicFileChooserUI.installUI(BasicFileChooserUI.java:136)
    	at com.sun.java.swing.plaf.windows.WindowsFileChooserUI.installUI(WindowsFileChooserUI.java:127)
    	at javax.swing.JComponent.setUI(JComponent.java:668)
    	at javax.swing.JFileChooser.updateUI(JFileChooser.java:1762)
    	at javax.swing.JFileChooser.setup(JFileChooser.java:360)
    	at javax.swing.JFileChooser.<init>(JFileChooser.java:333)
    	at javax.swing.JFileChooser.<init>(JFileChooser.java:286)
    	at Fenetre$jButtonListener.actionPerformed(Fenetre.java:90)
    	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
    	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
    	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
    	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
    	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
    	at java.awt.Component.processMouseEvent(Component.java:6038)
    	at javax.swing.JComponent.processMouseEvent(JComponent.java:3260)
    	at java.awt.Component.processEvent(Component.java:5803)
    	at java.awt.Container.processEvent(Container.java:2058)
    	at java.awt.Component.dispatchEventImpl(Component.java:4410)
    	at java.awt.Container.dispatchEventImpl(Container.java:2116)
    	at java.awt.Component.dispatchEvent(Component.java:4240)
    	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
    	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
    	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
    	at java.awt.Container.dispatchEventImpl(Container.java:2102)
    	at java.awt.Window.dispatchEventImpl(Window.java:2429)
    	at java.awt.Component.dispatchEvent(Component.java:4240)
    	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
    	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
    	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
    	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
    	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
    	at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

    Une idée du probléme?

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 22
    Par défaut
    Pourrais-tu également nous fournir l'appel à la classe Fenetre.
    Car, j'ai essayé le code fourni chez moi, ca fonctionne très bien.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 287
    Par défaut
    Voilà, mais comme je l'ai dit, juste la création d'une nouvelle fenetre :

    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
     
    public class Main {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		new Fenetre();
     
     
     
    	}
     
    }

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 22
    Par défaut
    Mauvaise nouvelle, j'ai fait le même main.

    J'ai juste mis en commentaire la ligne
    gbcMajZip.anchor = GridBagConstraints.BASELINE_LEADING;

    Car sinon, ça ne compilait pas chez moi.

    A par ça, ça fonctionne très bien

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 287
    Par défaut
    Rahh, je m'en doutais que le probléme ne venait pas du code...
    Et puis j'ai testé une appli contenant un jfilechooser qui fonctionnait trés bien et qui maintenant me retourne la même erreur...

    Le mauvais temps qui fait ça?

  6. #6
    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,

    Citation Envoyé par Micke7 Voir le message
    Le mauvais temps qui fait ça?
    Ou un disque dur externe avec une icône personnalisé...

    Il semble qu'il y ai un bug dans le LnF Windows : http://bugs.sun.com/bugdatabase/view...bug_id=6210674

    La description correspond tout à fait à ton problème... Malheureusement il n'est pas encore corrigé



    La solution de contournement consiste à utiliser L'UI de Metal, ce qui donne une résultat pas super (à mes yeux) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // A faire après avoir changé le LnF :
    UIManager.put("FileChooserUI", "javax.swing.plaf.metal.MetalFileChooserUI");


    Puisque le problème semble survenir du chargement de l'icône, tu pourrais peut-être tenté ceci (je n'ai pas pu reproduire le bug donc j'ignore si cela peut fonctionner ou pas) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	 jFileChooser.setFileView(new FileView() {
    		 private final FileSystemView view = FileSystemView.getFileSystemView();
    		@Override
    		public Icon getIcon(File f) {
    			return view.getSystemIcon(f);
    		} 
    	 });

    Pour finir, deux remarques :
    • Change ton LookAndFeel avant de créer tout composant ou fenêtre (éventuellement dans ton main), cela te permet d'éviter l'updateComponentTreeUI() et la ré initialisation des valeurs
    • Plutôt que de définir en dur le nom du LookAndFeel, utilise la méthode getSystemLookAndFeelClassName() qui te retournera la classe la plus approprié par rapport à l'OS :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

    a++

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

Discussions similaires

  1. problème avec JFilechooser en multiselection
    Par soumti84 dans le forum Agents de placement/Fenêtres
    Réponses: 7
    Dernier message: 05/08/2009, 19h35
  2. Problème avec JFileChooser et répertoire sur un poste distant.
    Par Dambrath dans le forum Agents de placement/Fenêtres
    Réponses: 1
    Dernier message: 11/05/2009, 16h34
  3. problème avec JFileChooser
    Par chebmo1986 dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 09/02/2009, 16h01
  4. Problème avec JFileChooser (BUG ?)
    Par vano dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 05/05/2006, 10h03
  5. problème avec JFileChooser
    Par Baptiste Wicht dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 15/12/2005, 21h51

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