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 :

Passage de paramètre "File" dans une fonction


Sujet :

Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 28
    Points : 12
    Points
    12
    Par défaut Passage de paramètre "File" dans une fonction
    Bonsoir, bonsoir,

    J'ai actuellement un petit problème lorsque je passe en paramètre un fichier.

    Mon code :
    ------------------------------------------------------------------------
    File PathParentDirAlbums; //Repertoire contenant les albums

    PathParentDirAlbums = new File("C:\\test");
    //Si le chemin selectionné existe
    if (PathParentDirAlbums.exists())
    CleanAllAlbum(PathParentDirAlbums);
    else
    javax.swing.JOptionPane.showMessageDialog(null,"Erreur du répertoire");
    ------------------------------------------------------------------------

    Prototype de ma fonction :
    ------------------------------------------------------------------------
    public static boolean CleanAllAlbum (File PathDirAlbums)
    ------------------------------------------------------------------------


    Lorsque je passe en pas à pas (mode debug), sur l'appel de la fonction, une exeption se déclenche :
    ------------------------------------------------------------------------
    // Can get and throw only unchecked exceptions
    catch (RuntimeException e) {
    processException(e, modalFiltersCount > 0);
    } catch (Error e) {
    processException(e, modalFiltersCount > 0);
    }
    ------------------------------------------------------------------------

    Je n'ai jamais suivit de cours Java, peut-être l'erreur est flagrante mais je ne vois pas du tout...
    Si qqn est plus zelé que moi

    En vous remerciant d'avance !

    Saket

  2. #2
    Membre éprouvé Avatar de Jidefix
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    742
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 742
    Points : 1 154
    Points
    1 154
    Par défaut
    Bonjour,
    bienvenue sur Developpez et dans le monde de java,
    je te recommande tout d'abord de prendre les bonnes habitudes sur le nommage de variables et fonctions:
    - toutes les variables et fonctions commencent par un minuscule
    - Toutes les classes commencent par une majuscule

    C'est tout bête mais ça rend le code beaucoup plus lisible et comprehensible pour une personne extérieure (on voit tout de suite ce qui est une fonction et ce qui ne l'est pas)

    Sinon pour pouvoir résoudre ton erreur, le mieux serait de nous donner la stackTrace de cette erreur.
    Cette stackTrace peut être obtenue depuis le catch en rajoutant la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    catch (RuntimeException e) {
    e.printStatckTrace();
    processException(e, modalFiltersCount > 0);
    } catch (Error e) {
    e.printStatckTrace();
    processException(e, modalFiltersCount > 0);
    }
    Veuillez agréer nos sentiments les plus distingués. Soyez assurés de notre entière collaboration, bien à vous pour toujours et à jamais dans l'unique but de servir l'espérance de votre satisfaction, dis bonjour à ton père et à ta mère, bonne pétanque, mets ton écharpe fais froid dehors.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 28
    Points : 12
    Points
    12
    Par défaut
    Bonjour Jidefix ,
    Je te remercie de tes petits conseils que je vais appliquer à partir de maintenant !

    J'ai du mal m'expliquer, l'exception ce n'est pas moi qui la gère ni qui la génère !
    Lorsque je passe sur ma fonction cleanAllAlbum(MyFile); et que je presse suivant (pour passer à la ligne suivante du code en mode debug), il m'ouvre le fichier "EventDispatchThread.java [r/o]" ou le code de l'exception s'y trouve:
    ------------------------------------------------------------------------
    // Can get and throw only unchecked exceptions
    catch (RuntimeException e) {
    processException(e, modalFiltersCount > 0);
    } catch (Error e) {
    processException(e, modalFiltersCount > 0);
    }
    ------------------------------------------------------------------------
    en pointant directement sur la troisième ligne !

    Le problème vient du fait que je passe un fichier en paramètre, mais je ne sais pas pourquoi, ni comment et du coup je ne peux pas résoudre mon probleme!

    Merci !

    Saket

  4. #4
    Membre éprouvé Avatar de Jidefix
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    742
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 742
    Points : 1 154
    Points
    1 154
    Par défaut
    Ton problème est que c'est la méthode "cleanAllAlbum(MyFile)" qui génère une "Error".
    La principale différence entre une exception et une erreur en java est une question de principe:

    - Une exception est une erreur d'input: on a donné un mauvais input à une méthode qui plante: on est amené à gérer cette exception dans le code.

    - une erreur est un problème "inattendu", qui survient généralement à la suite d'un mauvais état de la JVM. La plus courante étant la tristement célèbre "OutOfMemoryError" qui survient lorsqu'il n'y a plus de mémoire.


    Ton problème est que tu n'as pas la moindre information sur cette erreur.
    As-tu essayé de laisser ton programme continuer sur cette erreur? Normalement une trace devrait s'afficher dans la console avec principalement le type d'erreur...

    L'idéal serait que tu regardes le code de la fonction cleanAllAlbum, afin qu'on puisse commencer à regarder ce qui pourrait planter dedans.


    edit: je te déconseille très fortement de te lancer dans le debug de l'Event Dispatch Thread, d'une part parce que ce n'est pas lui qui a généré une erreur, d'autre part parce que tu risques d'être vite largué dans les sources de l'API java En revanche rien ne t'empêche de rentrer dans ta fonction.
    Veuillez agréer nos sentiments les plus distingués. Soyez assurés de notre entière collaboration, bien à vous pour toujours et à jamais dans l'unique but de servir l'espérance de votre satisfaction, dis bonjour à ton père et à ta mère, bonne pétanque, mets ton écharpe fais froid dehors.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 28
    Points : 12
    Points
    12
    Par défaut
    En fait je vais t'engager toi comme debugger

    Je te remercie encore une fois de ton aide...

    Alors si je laisse tourné le programme, cela marche à moitié sans crier, mais en affichant toutes ces erreurs dans la console :

    --------------------------------------------------------------------------Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at cleanfiles.CleanFilesView.CleanAlbum(CleanFilesView.java:284)
    at cleanfiles.CleanFilesView.CleanAllAlbum(CleanFilesView.java:264)
    at cleanfiles.CleanFilesView.jbtCleanFileMouseClicked(CleanFilesView.java:243)
    at cleanfiles.CleanFilesView.access$800(CleanFilesView.java:23)
    at cleanfiles.CleanFilesView$4.mouseClicked(CleanFilesView.java:127)
    at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:253)
    at java.awt.Component.processMouseEvent(Component.java:6266)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
    at java.awt.Component.processEvent(Component.java:6028)
    at java.awt.Container.processEvent(Container.java:2041)
    at java.awt.Component.dispatchEventImpl(Component.java:4630)
    at java.awt.Container.dispatchEventImpl(Container.java:2099)
    at java.awt.Component.dispatchEvent(Component.java:4460)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4247)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
    at java.awt.Container.dispatchEventImpl(Container.java:2085)
    at java.awt.Window.dispatchEventImpl(Window.java:2475)
    at java.awt.Component.dispatchEvent(Component.java:4460)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
    --------------------------------------------------------------------------


    Je pense que ce qui nous intéresse, c'est les 5 premières lignes d'erreur (ce sont celle de mon fichier.java).

    Je me suis donc rendu à chaque numéro de ligne qu'il donnait, et cela correspond aux appels de fonctions ou je passe un fichier en paramètres.

    Voilà pour ce qui est de mon analyse.

    Je te fourni maintenant les informations que tu m'as demandé, voici le code de ma fonction (si tu veux que je te mette mon code entier en pièce jointe, il n'y a cas demandé ) :
    --------------------------------------------------------------------------
    public static boolean CleanAllAlbum (File PathDirAlbums)
    {
    //Lister tous les albums
    File [] AlbumList = PathDirAlbums.listFiles();

    //S'il y a au moin un album
    if (AlbumList.length>0)
    //Pour chaque album
    for(int i=0 ; i<AlbumList.length ; i++)
    //Nettoyer
    CleanAlbum(AlbumList[i]);
    else
    javax.swing.JOptionPane.showMessageDialog(null,"Aucun album trouvés");

    return true;
    }
    --------------------------------------------------------------------------

    La fonction CleanAlbum (désolé pour la majuscule) a besoin du même fichier en paramètre. Serait-ce cela le problème ?

    Merci encore

    Saket

  6. #6
    Membre éprouvé Avatar de Jidefix
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    742
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 742
    Points : 1 154
    Points
    1 154
    Par défaut
    L'erreur se trouve très précisément à la ligne 284 de ton fichier, dans la méthode CleanAlbum(File f).
    Le must serait que tu publie juste le code de cette méthode-ci et on devrait y arriver
    Veuillez agréer nos sentiments les plus distingués. Soyez assurés de notre entière collaboration, bien à vous pour toujours et à jamais dans l'unique but de servir l'espérance de votre satisfaction, dis bonjour à ton père et à ta mère, bonne pétanque, mets ton écharpe fais froid dehors.

  7. #7
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 075
    Points : 7 981
    Points
    7 981
    Par défaut
    Ne serait pas null ?
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 28
    Points : 12
    Points
    12
    Par défaut
    Et voici comme demandé par Jidefix le code de la fonction cleanAlbum :
    --------------------------------------------------------------------
    public static boolean CleanAlbum (File PathAlbum)
    {
    //Nettoyer le nom de l'album
    RenameFile(PathAlbum);
    //Lister le contenu de l'album
    File [] TrackList = PathAlbum.listFiles();
    //S'il y a au moins un fichier
    if (TrackList.length>0)
    //Pour chaque fichier
    for(int i=0 ; i<TrackList.length ; i++)
    //Nettoyer le nom du fichier
    RenameFile(TrackList[i]);
    return true;
    }
    --------------------------------------------------------------------

    La ligne 284 correspond à mon test (if (TrackList.length>0)) pour info...

    Merci !

    Saket

  9. #9
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 075
    Points : 7 981
    Points
    7 981
    Par défaut
    Je repete mon message d'au dessus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    File [] TrackList = PathAlbum.listFiles();
    --> te renvoye certainement un null.

    Rajoute un test style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ((TrackList!=null) &&  (TrackList.length>0))
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2008
    Messages : 28
    Points : 12
    Points
    12
    Par défaut
    Ho excuse moi wax78, je n'avais pas vu ton post !

    Tu as bien fait de vite me le faire remarqué car ta solution me convient et fonctionne parfaitement

    Je vous remercie à tous les deux pour votre aide précieuse et de votre patience!

    En espérant vous rendre l'appareil un cou, je vous souhaite une bonne fin d'aprem !

    Saket

  11. #11
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 075
    Points : 7 981
    Points
    7 981
    Par défaut
    Aucun problèmes, bonne continuation.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. Passage de paramètres vers un Simulink dans une fonction
    Par littlebigman dans le forum Simulink
    Réponses: 2
    Dernier message: 11/02/2011, 11h39
  2. Réponses: 4
    Dernier message: 15/08/2007, 22h05
  3. [ADO] Passage de paramètre de type Date dans une requête
    Par e-ric dans le forum Bases de données
    Réponses: 6
    Dernier message: 25/01/2006, 12h36

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