Forum Clubic

[Résolu] Executable java - dossiers

Bonjour à tous !

Je viens de terminer un projet en Java.

J’aimerais le rendre executable plutôt que d’avoir à lancer une console etc…
J’arrive à regrouper les .class dans un jar executable mais le problème est que il faut pour le moment que mes dossiers contenant les images utilisées dans mes .class soient dans le même dossier que ce jar.

Ce que je voudrais c’est TOUT regrouper dans le jar, autrement dit mon dossier images, les .class etc…

Quelqu’un aurait-il une idée?

Merci d’avance !

Tu peux stocker tes images dans ton jar en tant que ressource. Il faut modifier l’utilisation de tes images, elles sont accessibles par UneClasse.getClass().getRessource(“image.jpg”) ou UneClasse.getClass().getRessourceAsStream(“image.jpg”)

le premier cas te permet de retrouver l’url de ton image commençant par “jar:…” tu peux aussi spécifier directement cette url. (par exemple dans le Toolkit.getImage(URL) )

Avec ant, tu crée une régle copiant les ressources (de mémoire, copy)

Et tu utilises MaClass.class.getResource() etc.

merci pour les réponses, mais je n’ai pas compris :ane: .

A quoi doit ressembler mon manifest.mft et la commande qui va avec?
De même, je ne vois pas comment utiliser ceci :

UneClasse.getClass().getRessource("image.jpg") :??:
Autrement dit comment les stocker en ressource? A quoi doit correspondre et ressembler UneClasse?

Merci :jap: !

UneClasse c’est juste c’importe quelle classe de ton projet, ça permet juste d’appeler la méthode Class.getRessource.

une ressource c’est n’importe quel fichier accessible via ton classpath, donc il faut que les images soit dans le jar.

Après c’est dans le code java ou tu utilise les images qu’il faut s’assurer que tu va bien chercher les images en tant que ressource, donc toutes les références à tes images dans ton projet doivent pointer sur une URL de ressource: c’est dans tes sources Java que tu risque d’être obligé de modifier des choses. (sauf si c’est déjà fait) essaye de regarder au moins une de tes images pour voir comment elle est utilisée dans le source, et pour débugger, tu la place à un autre endroit d’un chemin accesible par le classpath.

Merci beaucoup ! je viens de réussir (apparement :paf: j’ai pas encore tout tester).

Pour ceux que ça interresse, j’ai changer dans ma classe où je chargeait mes images ceci :

TRESOR = new ImageIcon(Toolkit.getDefaultToolkit().getImage("img/tresor.gif").getScaledInstance(tailleCase,tailleCase,Image.SCALE_DEFAULT));

par ceci :

TRESOR = new ImageIcon(Toolkit.getDefaultToolkit().getImage(getClass().getResource("img/tresor.gif")).getScaledInstance(tailleCase,tailleCase,Image.SCALE_DEFAULT));

et la commande de ceci :

jar cvfm Pacman.jar manifest.mft *.class

par :

jar cvfm Pacman.jar manifest.mft *.class ./img/*

et voilà !

Encore merci !

Me revoilà !

La technique que vous m’avez décrite fonctionne très bien avec les images, mais je me retrouve avec un problème pour lire dans un fichier texte, que je met lui aussi dans le jar.
Ma lecture se fait par un BufferedReader.

Est-il possible de lire un fichier via un getResource ou un getResourceAsStream ?(si possible en conservant mon code avec le BufferedReader)

Merci.

PS : j’ai bien essayer ça mais sans succès :

lecteurAvecBuffer = new BufferedReader(new FileReader(getClass().getResource(nom_fic).getFile()));

C’est bon j’ai trouvé !
Ce n’est pas très intuitif à mettre en place mais ca marche très bien.
j’ai remplacer ceci :

BufferedReader lecteurAvecBuffer = new BufferedReader(new FileReader(nom_fic));

par ceci :

BufferedReader lecteurAvecBuffer = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream(nom_fic)));

Merci à tous !

PS : je n’ai absolument pas du toucher à mon précédent code de lecture dans le fichier suite à cette transformation !! :clap: