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 :

FileNotFoundException dans un JAR


Sujet :

Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 69
    Points : 50
    Points
    50
    Par défaut FileNotFoundException dans un JAR
    Bonjour à tous !

    J'ai créé un exécutable pour mon projet sous Eclipse en utilisant "Export".
    A la fin de la création, on me signale que le .jar a été créer malgré quelques avertissements.

    Je lance le .jar, il s'ouvre normalement, je vois l'interface de mon programme mais... il ne marche pas :
    lorsque je clique sur un bouton, il ne fait pas ce qu'il était sensé faire..
    pourquoi les fonctionnalité de mon application lui ont été retirées ?

    Merci de me répondre
    Je ne sais pas quoi faire

  2. #2
    Membre chevronné
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Points : 2 011
    Points
    2 011
    Par défaut
    Salut.

    C'est quoi les avertissements?

    Essaie de lancer ton jar dans l'invit de commande; tu devrais certainement relever des erreurs qui te mettrais sur la piste pour résoudre ton problème.

    Utilise la ligne de commande suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    java -jar le_nom_de_ton_jar.jar

    -"Tout ça me paraît très mal organisé. Je veux déposer une réclamation. Je paye mes impôts, après tout!"
    -"JE SUIS LA MORT, PAS LES IMPÔTS! MOI, JE N'ARRIVE QU'UNE FOIS".

    Pieds d'argile (1996), Terry Pratchett 1948 - 2015
    (trad. Patrick Couton)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 69
    Points : 50
    Points
    50
    Par défaut right
    C'est vrai, on dirait qu'il ait un problème.
    Mon .jar ne retrouve pas un certain objet (tabnew.obj). C'est une liste que j'ai sérialisée et dont j'ai besoin dans mon application. L'erreur est :
    "java.io.FileNotFoundException" et pourtant j'ai inclus ce fichier lors de la création du .jar .

    Pourquoi ça marche pas ?

    Merci

  4. #4
    Membre chevronné
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Points : 2 011
    Points
    2 011
    Par défaut
    Peux-tu faire voir le code que tu utilises pour accéder à ton fichier, s'il te plait?

    -"Tout ça me paraît très mal organisé. Je veux déposer une réclamation. Je paye mes impôts, après tout!"
    -"JE SUIS LA MORT, PAS LES IMPÔTS! MOI, JE N'ARRIVE QU'UNE FOIS".

    Pieds d'argile (1996), Terry Pratchett 1948 - 2015
    (trad. Patrick Couton)

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 69
    Points : 50
    Points
    50
    Par défaut
    le code pour accéder à l'objet que j'ai enregistré (en le sérialisant) ?
    ou la façon de la quelle je lance mon jar ?

    Merci Deadpool

  6. #6
    Membre chevronné
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Points : 2 011
    Points
    2 011
    Par défaut
    Citation Envoyé par amelia Voir le message
    le code pour accéder à l'objet que j'ai enregistré (en le sérialisant) ?
    ou la façon de la quelle je lance mon jar ?

    Merci Deadpool
    Le code utilisé pour accéder à l'objet sérialisé.

    -"Tout ça me paraît très mal organisé. Je veux déposer une réclamation. Je paye mes impôts, après tout!"
    -"JE SUIS LA MORT, PAS LES IMPÔTS! MOI, JE N'ARRIVE QU'UNE FOIS".

    Pieds d'argile (1996), Terry Pratchett 1948 - 2015
    (trad. Patrick Couton)

  7. #7
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    La notion de File ne marche plus dans un jar. Ca marche lors du développement car Eclipse exécute en mode explosé, mais une fois le jar exporté, ça casse.

    Il faut plutôt passer par class.getResourceAsStream pour récupérer un InputStream sur une ressource dans le jar.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 69
    Points : 50
    Points
    50
    Par défaut here is le code
    Voici la méthode que j'ai utilisée pour lire l'objet que j'avais sérialisé auparavant. L'objet en question est de type TableAnalyse que enregistré avec le nom "tabnew.obj".
    La classe "TableAnalyse" est une classe qui hérite de Hashtable.
    public TableAnalyse LectTable(String cheminFichier){
    TableAnalyse m=null;
    try
    {
    ObjectInputStream l=new ObjectInputStream(new FileInputStream(cheminFichier));
    m=(TableAnalyse)l.readObject();

    }
    catch(IOException exe)
    {
    System.out.println("Pb!! lecture");
    exe.printStackTrace();

    }
    catch (ClassNotFoundException c){
    System.out.println("classe not trouvée");

    }

    catch (NullPointerException np){
    System.out.println("pb null pointer");
    }

    return m;
    }
    J'ai utilisé la méthode comme suit :
    TableAnalyse t=LectTable("tabnew.obj");

    Je vais essayer, en attendant, ce que m'a proposé djo.mos.

    Merci

  9. #9
    Rédacteur

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Novembre 2006
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2006
    Messages : 503
    Points : 1 332
    Points
    1 332
    Par défaut
    A mon humble avis, le traitement des erreurs n'est pas bien écrit dans cette méthode LectTable() (minuscule serait mieux: lectTable()). C'est beaucoup trop général et il faudrait donner au minimum une référence exacte à cheminFichier pour chaque exception. Si vous sérialiser, il pourrait aussi y avoir des problèmes de version de Java. Au retour de LectTable() il faudrait vérifier le null et encore implémenter un getErreur() qui retournerait le texte à présenter (tous les System.out devrait disparaître).

    Si on donne tabnew.obj, c'est donc une référence à un objet qui se trouve dans le répertoire courant (de l'éxécution). Si cela marche sous Eclipse (j'ai aussi eu ce genre de problème sous Eclipse et Netbeans) il faut identifier où se trouve vraiment le fichier tabnew.obj!

    Je mettrais à l'entrée de LectTable:

    System.out.println("Répertoire courant: " + System.getProperty("user.dir"));
    voir dans les exceptions si le fichier n'est pas une référence absolue!

    Mieux encore:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    String errMsg = null;   //attribut private à la classe
     
    File myFile = new File(cheminFichier);
            if (!myFile.exists()) {
                errMsg = "File does not exist: " + myFile.getAbsolutePath();
                return null;
            }
    pour se simplifier la chose!

    Je pense que le problème ici est simple:
    la liste à sérialiser tabnew.obj doit se trouver sur la racine du .jar (à inclure dans la hérarchie Eclipse) ou copier à la main dans le répertoire de l'exécution.

Discussions similaires

  1. Réponses: 4
    Dernier message: 16/04/2009, 01h43
  2. Réponses: 3
    Dernier message: 24/11/2006, 11h12
  3. [Jar][Classpath]Pb chargement resource classpath dans un jar
    Par Pill_S dans le forum Général Java
    Réponses: 20
    Dernier message: 01/10/2004, 20h12
  4. [JAR] Accéder à un fichier dans un jar
    Par Nanoua dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 06/07/2004, 13h00
  5. [jar] BufferedImage issue d'un .jpeg dans un jar
    Par tit_henry dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 13/05/2004, 10h09

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