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 :

problème lors de l'exécution de mon .jar


Sujet :

Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 15
    Points : 9
    Points
    9
    Par défaut problème lors de l'exécution de mon .jar
    Bonjour à tous,

    Tout d'abord, j'en profite pour vous souhaiter une bonne année 2009. Moi, je commence l'année avec un problème que je n'arrive pas à résoudre !

    En effet, j'ai donc développer une application java multilangue. Pour que cela soit possible, j'ai crée un répertoire pour chaque langue que l'on souhaite ajoute ( un répertoire fr, en , spa ...) contenant chacun le fichier properties avec la traduction qui convient.

    Lorsque je lance mon appli , je dois donc arriver tout d'abord sur une fenetre contenant une JComboBox avec l'ensemble des langues présentes afin que l'utilisateur choisisse sa langue. Pour ce faire , je fais donc la liste de l'ensemble des répertoires des langues présentes au sein du répertoire lang de mon appli.

    Lorsque je lance mon main à partir d'Eclipse, pas de probleme , tout marche comme prévu.

    Mais lorsque je fais mon .jar, la comboBox reste vide, et je suppose donc que ma récupération des noms de répertoire ne doit pas fonctionner comme prévu , ce qui bloque toute utilisation de l'appli.


    Voici le code correspondant à cette récupération :

    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
     
     public jDialogPerso(java.awt.Frame parent, boolean modal) {
            super(parent, modal);
            initComponents();
            jTextPrix.setDocument(new DDocumentNumber());
            this.initdefault();
            this.setSize(360,260);
            this.setResizable(false);
            Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
            this.setLocation(dim.width/2 - this.getWidth()/2, dim.height/2 - this.getHeight()/2);
            File rep=new File(getPath()+"lang//");
            javax.swing.JOptionPane.showMessageDialog(null,getPath()+"lang//");
            if(rep.exists())
            {
                String [] files = rep.list();
                for(int i =0; i < files.length; i++)
                {
                	if (new File(getPath()+"lang//"+files[i]).isDirectory())
                    {
                        jLanguage.addItem(files[i]);
                    }
                }
            }
        }
    Si quelqu'un pouvait me donner un élément de réponse, ce serait sympa.

    Merci.

  2. #2
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    Bonjour,
    Pour internationaliser ton application tu devrais utiliser les ResourceBundle car ils sont fait pour ca :
    un petit tuto

  3. #3
    Membre éprouvé Avatar de anisj1m
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    1 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 067
    Points : 955
    Points
    955
    Par défaut
    c'est un problème de class path; soit tu utilise le méme class path que eclipse soit tu cherche les bibliothèque que tu n'as pas intégrer dans ton jar et tu les ajoute.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par Alkhan Voir le message
    Bonjour,
    Pour internationaliser ton application tu devrais utiliser les ResourceBundle car ils sont fait pour ca :
    un petit tuto
    Pour répondre à ta remarque, j'utilise bien des resourceBundle pour la traduction dans les fichiers properties, mais mon problème n'est pas à ce niveau.

    C'est lorsque je fais la liste des répertoires associés à chaque langue, c'est comme si, dans le jar, je n'avais plus la même hiérarchie. Comment faire pour ne pas utiliser le class path d'éclipse si c'est ça le problème ?

    En tout cas, merci pour vos réponses, je me sens moins seul

  5. #5
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    Bonjour,

    tes fichiers de langue ne sont pas dans le jar ? car ca peut etre important.
    Si ce n'est pas le cas, le problème le plus classique est que dans eclipse par défaut le lancement de l'appli ce fait dans le répertoire du projet.
    Par exemple si tu as un repertoire "config" tu peux y accéder en utilisant :
    "config/mon_fichier.ext"

    mais lorsque tu te fait un lanceur console la structure qui est souvent utilisé est :
    bin : contient le bat pour lancer l'appli
    lib : contient le jar de l'appli
    config : la configuration de l'appli

    dans se cas la tu dois utiliser "../config/mon_fichier.ext"

    ton problème doit certainement ressembler a ca

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Les répertoires de langues sont dans le .jar.

    Cependant, j'ai bien une configuration comme dit, c'est à dire que j'ai un répertoire bin ou les .class sont présents. Et dans le répertoire bin, j'ai également le répertoire de lang avec les répertoires correspondant aux différentes langues du soft.

  7. #7
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    dans ce cas tu t'y prend mal pour accéder aux fichiers.
    Lorsqu'un fichier se trouve dans le jar du dois utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //Pour avoir l'url exacte du fichier 
    URL url = getClass().getResource(fileName);
    // pour avoir un stream sur le fichier
    InputStream stream = getClass().getResourceAsStream(fileName);

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    je n'y arrive toujours pas

    En fait , pour etre plus clair, voici mon arborescence :

    http://www.developpez.net/forums/att...1&d=1231247035

    J'ai donc le répertoire src contenant l'ensemble de mes fichiers java ainsi que le répertoire langue , contenant lui même les répertoires correspondant aux langues fr, en ...

    et j'ai le répertoire d'output bin, contenant les fichiers .class, ainsi que les mêmes répertoires que src ( à savoir lang , dat, icons , docs).

    Lorsque je crée mon .jar, je choisis donc d'avoir l'ensemble de mes .class ainsi que les répertoires utiles ( à savoir lang , dat, icons , docs).

    Or , je ne comprends donc tjrs pas l'erreur
    Images attachées Images attachées  

  9. #9
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    bon, alors dis moi dans un premier temps ce que fait exactement ton getPath() ?

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    C'est une fonction qui me permet de retrouver le chemin courant. Voici cette fonction :

    public String getPath()
    {
    URL url=this.getClass().getResource("AppInit.class");
    String text=url.getPath();
    StringTokenizer tokenizer = new StringTokenizer(text, "/");
    int j=tokenizer.countTokens();
    String tmp;
    tmp=null;
    String concat="";

    for(int i=0; i<(j-1); i++)
    {
    tmp=tokenizer.nextToken();
    concat=concat+"/"+tmp;
    }
    String path=concat+"//";
    //jre 1.6 compatibility
    path = path.replace("%20", " ");
    //end
    return path;
    }

  11. #11
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    ok, en fait tu n'as pas besoin de ton getPath() pour le jar
    Si tu veux recupérer le repertoire lang fait quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    File f = new File(this.getClass().getResource("lang").toURI());

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Tout d'abord, je te remercie Alkhan vraiment pour m'aider à règler mon problème.

    J'ai remplacé tous les getPath() par le getResource().getURI , mais c'est toujours le même problème

    Je commence à perdre espoir... Mais ce que je ne comprend vraiment pas, c'est qu'en passant par le run d'eclipse, tout fonctionne , mais dès que j'exécute mon .jar , je rencontre le problème.

  13. #13
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    this.getClass().getResource("lang") te retourne quelque chose de valide ou non ?

  14. #14
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    Desolé j'ai fait une petite erreur en fait le code exacte est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    File f = new File(this.getClass().getResource("/lang").toURI());

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Encore et toujours le même film , malgré ces modifications , j'ai toujours le même soucis. Après avoir fait les modifs comme tu me l'as dit, cela fonctionne bien avec le run d'Eclipse, mais toujours pas lorsque je fait mon .jar.

    Je ne sais vraiment plus quoi faire

  16. #16
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    Effectivement, j'ai fait un test ca ne marche pas pour le répertoire

    En fait ca marche pour les fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    		URL url = getClass().getResource("/conf/test.txt");
    		if (url != null) {
    			String path = url.toString();
    			System.out.println("Url file : " + path);
    			File f = new File(path);
    			if (f.exists()) {
    				System.out.println("Ressource trouvée");
    			}
    		} else {
    			System.out.println("Ressource non trouvée");
    		}
    j'ai pas trouvé de solution pour le rep car visiblement le répertoire dans le jar n'est pas un répertoire donc tu ne peux pas le parcourir de cette facon.

    Si tu souhaites faire cela je te conseil de sortir les fichiers traduction du jar.

Discussions similaires

  1. problème lors de l'exécution de mon programme
    Par salma1990 dans le forum C++
    Réponses: 4
    Dernier message: 23/04/2013, 19h16
  2. Réponses: 8
    Dernier message: 11/10/2010, 14h30
  3. Problème lors de l'exécution de mon script
    Par bagu dans le forum Windows
    Réponses: 1
    Dernier message: 26/09/2010, 16h00
  4. Problème lors de l'exécution de mon script en PL SQL
    Par peregna2007 dans le forum PL/SQL
    Réponses: 1
    Dernier message: 21/06/2010, 22h48
  5. [MySQL] problème lors de l'exécution de mon script php concernat la création d'un forum
    Par safadkhi dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 29/06/2009, 13h44

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