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 :

.jar ne fonctionne pas


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2013
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 27
    Par défaut .jar ne fonctionne pas
    Bonjour,

    J'ouvre ce sujet car j'ai un problème que je n'arrive pas à résoudre malgré mes recherches.

    J'ai pour l'instant un mini-jeu (pas fini) qui se présente sous la façon suivante :
    1 - Une fenêtre se lance permettant de changer les options, commencer un nouveau jeu ou charger une sauvegarde
    2 - Après la création du jeu ou le chargement de la sauvegarde, cette première fenêtre se ferme et une autre s'ouvre (le jeu commence).

    Après de multiples recherches sur Internet, j'ai réussi à créer un fichier .jar exécutable, mais les différentes façons ont tous le même problème : la 2nd fenêtre ne s'affiche pas.

    La seul différence entre les 2 fenêtres est que sur la seconde, il y a des images.
    Je me suis donc demandé si se n'était pas le chargement des images qui faisait buggé ce .jar. Voici un exemple de comment je charge mes images si ça peut vous interraissé (les images ne sont pas dans le dossier src mais dans un autre dossier) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    File folder = new File("media/cells");
    for(File img : folder.listFiles()){
    	try{
    		images[(int)img.getName().charAt(0)] = ImageIO.read(img);
    	}catch(IOException e){
    		e.printStackTrace();
    		//System.exit(1);
    	}
    }
    Ce code permet de mettre dans un tableau toutes les images dans le dossier media/cells (tous les fichiers sont nommés de la forme un caractère.png (g.png pour l'herbe)

    Je me suis aussi demandé si cela ne provenait pas de la lecture de la map, puisque pour chargé la map, je lis un fichier .txt où chaque caractère est une image (d'où le nom g.png). Voici comment je lis le fichier :
    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
     
    String filename = "map/main.txt";
    String line;
    int i = 0;
    try{
    	BufferedReader file = new BufferedReader(new FileReader(filename));
    	while((line = file.readLine()) != null){
    		cells.add(new ArrayList<Cell>());
    		cellsadd.add(new ArrayList<CellAdd>());
    		for(int ii = 0; ii < line.length(); ii++){
    			cells.get(i).add(new Cell(line.charAt(ii)));
    			cellsadd.get(i).add(new CellAdd(ii, i));
    		}
    		i++;
    	}
    	file.close();
    }catch(IOException e){
    	e.printStackTrace();
    	//System.exit(1);
    }

    Tout ce code fonctionne quand je compile sous eclipse mais il ne fonctionne pas quand je lance mon .jar

    Merci d'avance !

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    à mon avis, je pense que le problème vient du fait que tu utilises des path relatifs pour tes images. Quand tu exécutes ton jar, les path relatifs sont résolus relativement au dossier d'exécution, celui dans lequel tu lances par exemple ta commande.

    Tu peux sois intégrer tes images à ton jar (ou à un autre jar dans le classpath) et utiliser les méthodes getResource() ou getResourceAsStream() de Class ou ClassLoader, ou veiller à ce que ton dossier d'images aie un path relatif à ton dossier d'exécution identique à celui que tu as mis en dur dans ton application (sachant que dans Eclipse, le dossier d'exécution est le dossier du Projet, par défaut)
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre averti
    Inscrit en
    Octobre 2013
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 27
    Par défaut
    Très bien merci, je vais me renseigner sur les méthode getRessource() et getRessourceAsStream() sur la doc de java.

  4. #4
    Membre averti
    Inscrit en
    Octobre 2013
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 27
    Par défaut
    J'ai pas mal cherché et je ne trouve pas de solution :

    Quel fonction faut-il appeler pour aller à la racine ? J'ai trouvé getSystemResource() qui me place directement dans le dossier bin mais il me faut donc remonter d'un cran avant d'aller dans mon dossier. J'ai bien vu la fonction getParent() mais je n'ai pas trouvé comment l'utiliser pour faire ce que je voulais.

    Donc comment puis-je me situer dans le dossier racine (dossier parent de bin) ?

    Voilà l'architecture de mon site :

    -- bin
    -- (les fichiers .class)
    -- src
    -- (les fichiers .java)
    -- map
    -- (les fichiers .txt contenant mes maps)
    -- save
    -- (les fichiers .txt contenant le héro sérialisé pour le sauvegarder)
    -- media
    -- (les fichiers et dossier contenant tous mes images / vidéos)

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Tu ne peux pas mettre tes fichiers de ressources en dehors de ton arborescence de packages et y accèder par getResource() ou getRessourceAsStream() (ou getSystemResource()).

    Ajoutes ton dossier d'images au classpath (par exemple, sous Eclipse, au build path en tant que class folder).

    Attention, le dossier racine (media dans ton cas), n'est pas inclus : si tu as par exemple un fichier "media/truc.png", tu ajoutes "media" à ton classpath, et tu fais getResource("truc.png") (ou ClassLoader.getSystemResource("truc.png")).
    fait pareil pour ton dossier map.

    Tu peux mettre ces 2 dossiers dans un dossier rsc et ajouter rsc à ton classpath (ainsi tu auras au final dans ton jar les deux dossiers map et media, sinon tu auras tous tes fichiers map et media à la racine dans ton jar)

    ton dossier save par contre, laisses-le en dehors de ton jar, puisque tu vas écrire dedans : les fichiers qui s'y trouvent ne pourront pas être accèdés par getResource(), mais par new File("save/truc..."), les fichiers avec path relatif étant relatifs au dossier d'éxécution de ton programme (celui ou tu lanceras ta commande javaw) et dans Eclipse, relatifs au dossier du projet
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Membre averti
    Inscrit en
    Octobre 2013
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 27
    Par défaut
    Mais j'ai besoin de lire le dossier save et de pouvoir écrire dedans pour créer le sauvegarde justement, et le new File("save/truc") ne fonctionne pas dans le .jar, donc le mieux est de tout include dans le dossier src donc ?

Discussions similaires

  1. Réponses: 3
    Dernier message: 24/03/2010, 10h19
  2. Réponses: 0
    Dernier message: 04/08/2009, 18h46
  3. Jar en applet ne fonctionnant pas
    Par Nix6800 dans le forum Applets
    Réponses: 7
    Dernier message: 26/06/2008, 19h22
  4. jar executable fonctionne mais pas trop
    Par ng.phung dans le forum Langage
    Réponses: 6
    Dernier message: 02/05/2007, 09h26
  5. [Jar] Double clique ne fonctionne pas ...
    Par sylvain_2020 dans le forum Général Java
    Réponses: 4
    Dernier message: 11/08/2004, 19h24

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