Java - multiples fichiers JAR - Web Applet

Florenzau Messages postés 29 Date d'inscription vendredi 3 juin 2005 Statut Membre Dernière intervention 8 février 2012 - 3 févr. 2012 à 09:28
Florenzau Messages postés 29 Date d'inscription vendredi 3 juin 2005 Statut Membre Dernière intervention 8 février 2012 - 8 févr. 2012 à 09:59
Bonjour,

Je développe une application web en Java (donc une applet) qui utilise une librairie contenant des images.

La librairie est une couche graphique basée sur des JPanels avec images.

Pour utiliser la librairie, je créé une archive JAR, et je l'inclus dans mon projet web Eclipse.

Problème, les images ne se chargent pas.

Librairie :
|-src/*.java
|-res/*.png
->Génère une archive : librairie.jar

Web Projet :
|-src/*.java
|-librairie.jar
->Génère une archive : WebProject.jar et un point d'entrée : WebApp.class

Première solution:
J'ai essayé de copier/coller les images dans le projet web et ça fonctionne (sous Eclipse), mais le problème est lors du portage sur le web, le chemin absolu du programme devient celui du navigateur (ex: c:\Program Files\Mozilla Firefox).
Du coup, l'accès relatif aux images ne fonctionne plus (sauf si les images sont aussi stockées dans Program Files, ce qui n'est pas bon du tout).

Donc deuxième solution:
J'ai lu pas mal de tutos et de forum qui traitent de la démarche à suivre pour insérer des images dans une archive JAR mais pour s'en servir ensuite, je galère...

Je n'arrive pas à faire en sorte que mon projet Web utilise les images contenues dans l'archive Librairie.jar.
J'utilise bien
imgURL = maClasse.class.getResource("Chemin relatif de mon image par rapport à la classe");
monImage = ImageIO.read(new File(imgURL.getPath());

Quand sous Eclipse, je lance une application de test au sein de la librairie, mes images se chargent.
Quand sous Eclipse, je lance le projet web qui utilise la librairie, rien ne va plus.

Avez vous des idées / suggestions ?

Merci beaucoup

6 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
3 févr. 2012 à 16:37
Bonjour,

Tu as deux solutions : utiliser le chemin absolu et le déclarer dans un fichier de properties ou bien inclure les images dans le .jar. Pour cela, tu peux regarder ce tutoriel : http://www.javafr.com/codes/INSERER-IMAGES-DANS-JAR-EXECUTABLE-ECLIPSE_51904.aspx

Remarque : les Applet ne sont pas vraiment des applications web...
0
Florenzau Messages postés 29 Date d'inscription vendredi 3 juin 2005 Statut Membre Dernière intervention 8 février 2012
7 févr. 2012 à 16:02
Bonjour,

Merci pour ta réponse.

Ta première solution n'est pas viable, l'applet s’exécute sur un PC distant. Les images ne sont pas stockées sur le pc client, elles doivent donc êtres dans le jar.

J'ai bien essayé la seconde solution, en respectant scrupuleusement les étapes du lien que tu m'as fournis mais en vain.

Les images insérées dans le jar de ma librairie ne sont pas chargées par les contrôles.
Les contrôles sont pourtant définis dans cette même librairie.
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
7 févr. 2012 à 16:14
Normalement, ca doit fonctionner, je ne sais pas ce qui as pu se passer chez toi...

Les images sont bien dans le mêmes package que les classes qui les appellent.
0
Florenzau Messages postés 29 Date d'inscription vendredi 3 juin 2005 Statut Membre Dernière intervention 8 février 2012
7 févr. 2012 à 16:37
Merci du soutien :-)

J'ai essayé en mettant tout le monde dans le même répertoire.
/src/
MonBouton.java
btn-normal.png

Constructeur du contrôle de la bibliothèque:
public void MonBouton()
{
  // Récuperation des images
  java.net.URL imageURL;
  try 
  {
    imageURL = MonButton.class.getResource("btn-normal.png");
    System.out.println("Path:"+imageURL.getPath());
    imgNormal = ImageIO.read(new File(imageURL.getPath()));
  }
  catch (IOException e)
  {
    e.printStackTrace();
  }
}
//... Plus loin, la méthode de déssin utilise imgNormal (BufferedImage) pour dessiner l'image


- Quand je teste la librairie (avant le jar) ça fonctionne, mon image est bien chargée :
Path:/S:/PROJETS/ClientApp/src/JAVA/librairie/src/btn-normal.png

- J'exporte la librairie (quand je regarde dedans avec Winrar, elle contient bien les images dans le bon dossier).

- Dans mon programme, quand j'appelle la création de mon contrôle qui utilise l'image, voici ce que j'observe:
Path:file:/S:/PROJETS/ClientApp/src/JAVA/applet/src/LIBRAIRIE.jar!btn-normal.png

javax.imageio.IIOException: Can't read input file!
at javax.imageio.ImageIO.read(Unknown Source)
at MonBouton.(MonBouton.java:111)
at MainPanel.(MainPanel.java:73)
at WebApplet.init(WebApplet.java:31)
at sun.applet.AppletPanel.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

Et l'image ne se charge pas.


Il y a surement une erreur de chemin ou quelque chose, car c'est censé fonctionner.

Une idée?

Merci encore
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
7 févr. 2012 à 19:53
Si ca fonctionne avant que tu fasses le jar c'est que les images n'ont pas été exportées dans le jar ou de la mauvaise facon.

Quand tu ouvres le jar avec winzip par exemple, est ce que tu retrouves bien tes images (pour ouvrir le jar remplace le .jar par un .zip)
0
Florenzau Messages postés 29 Date d'inscription vendredi 3 juin 2005 Statut Membre Dernière intervention 8 février 2012
8 févr. 2012 à 09:59
J'ai bien vérifié l'archive avec Winrar, elle contient bien les images
0
Rejoignez-nous