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

Java Discussion :

[JAVA] erreur File cannot be null


Sujet :

Java

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 150
    Points : 45
    Points
    45
    Par défaut [JAVA] erreur File cannot be null
    bonjour,

    depuis peu j'ai une erreur dans mon programme que je ne comprends

    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
     
    run:
    Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: File cannot be null
    	at java.xml/javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:199)
    	at My_Notam_Importer.ExtractionZone.evaluerDOM(ExtractionZone.java:61)
    	at My_Notam_Importer.MyWindow.jButton1ActionPerformed(MyWindow.java:236)
    	at My_Notam_Importer.MyWindow$1.actionPerformed(MyWindow.java:81)
    	at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967)
    	at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2308)
    	at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405)
    	at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262)
    	at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279)
    	at java.desktop/java.awt.Component.processMouseEvent(Component.java:6614)
    	at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3342)
    	at java.desktop/java.awt.Component.processEvent(Component.java:6379)
    	at java.desktop/java.awt.Container.processEvent(Container.java:2263)
    	at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4990)
    	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
    	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4822)
    	at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4919)
    	at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4548)
    	at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4489)
    	at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)
    	at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2769)
    	at java.desktop/java.awt.Component.dispatchEvent(Component.java:4822)
    	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772)
    	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
    	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
    	at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
    	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
    	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)
    	at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:743)
    	at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
    	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
    	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
    pourriez vous m'aider a mieux comprendre s'il vous plait?

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Le paramètre passé a la méthode qui contient une référence sur le fichier ou le chemin vers le fichier est null, il ne doit pas être null. Utilise le débogueur ou fait des impressions pour vérifier la valeur de tes paramètres dans My_Notam_Importer.ExtractionZone::evaluerDOM a la ligne 61.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 150
    Points : 45
    Points
    45
    Par défaut
    Bonsoir bouye,

    Merci pour votre réponse.
    Voici la méthode (la ligne 61 du message d'erreur précédent correspond ici a la ligne de code 17).
    Ce que je ne saisi pas, c'est que retour est souligné aussi en rouge dans mon IDE)
    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
     
    public String evaluerDOM(File file, String expression, QName retour){
    		String texteCopie=null;
     
                    String zon1= "QRRCA";
                        String zon2= "QRDCA";
                            String zon3= "QRPCA";
                                String zon4= "QRTCA";
                            String zon5= "QWELW";
                        String zon6= "QWPLW";
                    String zon7= "QWULW";
    		try{
    			DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
                            docBuilderFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, ""); 
                            docBuilderFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_SCHEMA, ""); 
    			DocumentBuilder constructeur = docBuilderFactory.newDocumentBuilder();
    			Document document = constructeur.parse(file);
     
    			//création du XPath 
    			XPathFactory fabrique = XPathFactory.newInstance();
    			XPath xpath = fabrique.newXPath();
     
    			//évaluation de l'expression XPath
    			XPathExpression exp = xpath.compile(expression);
    			NodeList resultat = (NodeList) exp.evaluate(document,XPathConstants.NODESET); // récupère la liste de Node correspondant au xpath (donc des pre)
     
                            StringBuilder sb=new StringBuilder(); // pour faire la concaténation
                            for(int i=0; i<resultat.getLength(); i++ ) { // parcours
     
                                    Node pre = resultat.item(i); // on récupère le node d'index i 
                                    if (pre.getTextContent().contains(zon1)|| pre.getTextContent().contains(zon2) || pre.getTextContent().contains(zon3) || pre.getTextContent().contains(zon4) || pre.getTextContent().contains(zon5) || pre.getTextContent().contains(zon6) || pre.getTextContent().contains(zon7)){
                                        sb.append("\n");//ajout d'une ligne de séparation
    				sb.append(pre.getTextContent()); // concaténation du texte du node
                                    sb.append("\n");//ajout d'une ligne de séparation
                                    }
                            }
    			texteCopie=sb.toString(); // 
    		}catch(XPathExpressionException | ParserConfigurationException | SAXException | IOException xpee){//comment
    		}
    		return texteCopie;
    	}

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Document document = constructeur.parse(file);
    Et donc il faudrait vérifier que la valeur de file (qui est un paramètre de ta méthode) n'est pas null.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 150
    Points : 45
    Points
    45
    Par défaut
    désolé je m'en sors pas je ne comprends pas..

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Je ne vois pas trop ce qu'il est possible d'ajouter. Tu passes la valeur null dans une méthode qui ne supporte pas cette valeur, donc ça plante avec une erreur. Corrige ton code pour mettre une valeur correcte dans cette variable.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 150
    Points : 45
    Points
    45
    Par défaut
    quand je dis que j'ai du mal, j'entends par la que j'ai beau chercher je trouve pas où je passe la valeur nulle pour le paramètre file

    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
     
    package My_Notam_Importer;
     
    import java.io.*;
    import javax.xml.XMLConstants;
    import javax.xml.xpath.*;
    import org.w3c.dom.Document;
    import org.xml.sax.SAXException;
    import javax.xml.namespace.*; 
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
     
    public class ExtractionZone {
     
    	static File fichier3;
            /**
             * @param args
             */
            	public static void main(String[] args) throws IOException {
     
                ExtractionZone test3 = new ExtractionZone("/Users/moi/Desktop/xml notam source.xml");
    		String resultat = test3.evaluerDOM(fichier3, "//PRE", XPathConstants.STRING);
     
                    File notams = new File("/Users/moi/Desktop/Notams FIR.txt") ;
                try (PrintWriter out = new PrintWriter(new FileWriter(notams))) {
                    out.write(resultat) ; //écris resultat dans le fichier
                    out.println(); //fais un retour à la ligne dans le fichier
     
     
    	}
    } 
    // Constructeur 
    	public ExtractionZone (String url){
                File fichier3 = new File(url);
    	}
    	// Méthodes 
    	/**
             * créer une instance de XPath et lui faire évaluer une XPathExpression
         * @param file
         * @param expression
         * @param retour
         * @return 
             */
    	public String evaluerDOM(File file, String expression, QName retour){
    		String texteCopie=null;
     
                    String zon1= "QRRCA";
                        String zon2= "QRDCA";
                            String zon3= "QRPCA";
                                String zon4= "QRTCA";
                            String zon5= "QWELW";
                        String zon6= "QWPLW";
                    String zon7= "QWULW";
    		try{
    			DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
                            docBuilderFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, ""); 
                            docBuilderFactory.setAttribute(XMLConstants.ACCESS_EXTERNAL_SCHEMA, ""); 
    			DocumentBuilder constructeur = docBuilderFactory.newDocumentBuilder();
    			Document document = constructeur.parse(file);
     
    			//création du XPath 
    			XPathFactory fabrique = XPathFactory.newInstance();
    			XPath xpath = fabrique.newXPath();
     
    			//évaluation de l'expression XPath
    			XPathExpression exp = xpath.compile(expression);
    			NodeList resultat = (NodeList) exp.evaluate(document,XPathConstants.NODESET); // récupère la liste de Node correspondant au xpath (donc des pre)
     
                            StringBuilder sb=new StringBuilder(); // pour faire la concaténation
                            for(int i=0; i<resultat.getLength(); i++ ) { // parcours
     
                                    Node pre = resultat.item(i); // on récupère le node d'index i 
                                    if (pre.getTextContent().contains(zon1)|| pre.getTextContent().contains(zon2) || pre.getTextContent().contains(zon3) || pre.getTextContent().contains(zon4) || pre.getTextContent().contains(zon5) || pre.getTextContent().contains(zon6) || pre.getTextContent().contains(zon7)){
                                        sb.append("\n");//ajout d'une ligne de séparation
    				sb.append(pre.getTextContent()); // concaténation du texte du node
                                    sb.append("\n");//ajout d'une ligne de séparation
                                    }
                            }
    			texteCopie=sb.toString(); // 
    		}catch(XPathExpressionException | ParserConfigurationException | SAXException | IOException xpee){//comment
    		}
    		return texteCopie;
    	}
     
     
    }

  8. #8
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    Euh.... c'est plutôt évident en fait... fichier3 est jamais initialisée.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    static File fichier3;
    [...]        
    String resultat = test3.evaluerDOM(fichier3, "//PRE", XPathConstants.STRING);
    Faudrait penser à utiliser le débogueur des fois, ça permet entre autre de vérifier les valeurs des variables pendant que le code tourne.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 150
    Points : 45
    Points
    45
    Par défaut
    Désolé, en effet étant amateur, tout ne m'est pas évident.
    j'ai remplacé fichier3 par file et cela a résolu mon problème.
    quand au debugger, j'ai du mal a m'en servir aussi.
    je vais voir comment on utilise cette fonction.
    merci pour votre aide bouye

  10. #10
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Par défaut
    On a tous commencé un jour et c'est en apprenant de nos erreur qu'on peut avancer et s'améliorer. N'ayant pas accès a la totalité du code au début, il était difficile de trouver l'origine exacte de l'erreur.

    Cependant le message de l'exception était assez clair : java.lang.IllegalArgumentException: File cannot be null donc une méthode reçoit en paramètre une valeur null et refuse cette valeur.

    La trace permet rapidement de trouver ou cela se produit : at java.xml/javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:199) clairement c'est dans l'API Java donc a un endroit ou tu ne peux pas intervenir.

    Mais la ligne suivante de la trace at My_Notam_Importer.ExtractionZone.evaluerDOM(ExtractionZone.java:61) elle est dans ton code !

    Ce qui nous mène a la ligne Document document = constructeur.parse(file);. Comme la méthode parse() est bien invoquée (cf trace), c'est donc que file est null.

    Or file est un paramètre de la méthode public String evaluerDOM(File file, String expression, QName retour){ qui n'est jamais modifié dans le corps de cette méthode. La valeur null est donc transmise depuis l’extérieur.

    Nous arrivons dans dans le corps principal du programme qui tu nous a fourni ensuite : String resultat = test3.evaluerDOM(fichier3, "//PRE", XPathConstants.STRING);, le soucis est donc cause par la variable fichier3.

    En regardant le code on peut voir qu'elle est bien déclarée static File fichier3; mais jamais initialisée et donc que sa valeur est bien null qui est donc une valeur non-valide pour la méthode DocumentBuilder.parse().
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  11. #11
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 150
    Points : 45
    Points
    45
    Par défaut
    merci pour ces clarifications et aide tout au long de ces investigations.
    j'apprecie

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/06/2009, 16h22
  2. Réponses: 2
    Dernier message: 24/06/2008, 16h30
  3. Message d`erreur " error:cannot read : src/main/org/pache/tools/bzip2/*.java "
    Par wiss20000 dans le forum RedHat / CentOS / Fedora
    Réponses: 0
    Dernier message: 09/11/2007, 15h36
  4. Réponses: 9
    Dernier message: 03/06/2007, 21h40
  5. [Hibernate] erreur database product name cannot be null
    Par enimiste dans le forum Hibernate
    Réponses: 4
    Dernier message: 24/04/2007, 19h07

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