OVH Cloud OVH Cloud

path relatif entre package et images

4 réponses
Avatar
yvon.thoravalNO-SPAM
j'ai un ceratins nombre de sous-dossiers dans mon dossier images.

pour l'instant j'appelle les images depuis le package "yt.ui.*" donc mon
arborescence est ainsi :

yt/
dbms/
*.java
sortable/
*.java
tables/
*.java
tests/
*.java
ui/
*.java
images/
flags/
vineplants/
tables/
manage/

donc, charger une image depuis yt.ui.ma_classe se fait par :

<code>
String imgLocation = "images/tables/" + imageName + ".gif";
java.net.URL imageURL = getClass().getResource(imgLocation);
</code>

Avec cette arborescence j'ai deux pbs :

- si je veux accéder à une image dans yt.ui.images.flags depuis
yt.sortable.ma_classe comment est-ce que je fait ?

- je préférerait avoir deux jars l'un "macave.jar" incluant toutes les
classes et l'autre "images.jar" incluant toutes les images, les deux
jars étant placés dans le même répertoire lib/. Dans ce cas quelle
imgLocation dois-je utiliser ? (j'ai essayé "/images/tables/" +
imageName + ".gif" MAIS la resource n'est pas trouvée...)
--
yt

4 réponses

Avatar
Xavier Tarrago
Si le nom de ressource commence par /, c'est un nom absolu, il faut qu'il
soit complet:

<code>
String imgLocation = "/yt/ui/images/flags/" + imageName + ".gif";
java.net.URL imageURL = getClass().getResource(imgLocation);
</code>

Pour les jars, je n'ai pas d'expérience, mais je pense que le fait que les
fichiers soient dans deux jars différents ne devrait rien changer. Ce qui
compte, c'est les noms des packages. Ils doivent être les mêmes dans les
deux jars. (penser à les mettre dans le classpath...)

"Yvon Thoraval" a écrit dans le message de
news:1gkrjn7.10t1u071qt3db1N%
j'ai un ceratins nombre de sous-dossiers dans mon dossier images.

pour l'instant j'appelle les images depuis le package "yt.ui.*" donc mon
arborescence est ainsi :

yt/
dbms/
*.java
sortable/
*.java
tables/
*.java
tests/
*.java
ui/
*.java
images/
flags/
vineplants/
tables/
manage/

donc, charger une image depuis yt.ui.ma_classe se fait par :

<code>
String imgLocation = "images/tables/" + imageName + ".gif";
java.net.URL imageURL = getClass().getResource(imgLocation);
</code>

Avec cette arborescence j'ai deux pbs :

- si je veux accéder à une image dans yt.ui.images.flags depuis
yt.sortable.ma_classe comment est-ce que je fait ?

- je préférerait avoir deux jars l'un "macave.jar" incluant toutes les
classes et l'autre "images.jar" incluant toutes les images, les deux
jars étant placés dans le même répertoire lib/. Dans ce cas quelle
imgLocation dois-je utiliser ? (j'ai essayé "/images/tables/" +
imageName + ".gif" MAIS la resource n'est pas trouvée...)
--
yt


Avatar
yvon.thoravalNO-SPAM
Xavier Tarrago wrote:

Si le nom de ressource commence par /, c'est un nom absolu, il faut qu'il
soit complet:

<code>
String imgLocation = "/yt/ui/images/flags/" + imageName + ".gif";
java.net.URL imageURL = getClass().getResource(imgLocation);
</code>

Pour les jars, je n'ai pas d'expérience, mais je pense que le fait que les
fichiers soient dans deux jars différents ne devrait rien changer. Ce qui
compte, c'est les noms des packages. Ils doivent être les mêmes dans les
deux jars. (penser à les mettre dans le classpath...)


OK, merci, ça roule, mais question annexe, si par exemple il me manque
une image dans mon images.jar est-ce que je peux la mettre dans le
dossier lib/ ainsi :

images/
path/to/
mon_image_manquante.gif

??? utile dans la période de mise au .
--
yt

Avatar
Xavier Tarrago
Il faut qu'il soit dans le classpath. getResource() permet d'accéder à des
fichiers qui sont dans le classpath. Après, un chemin dans le classpath (ex
com.mycomp.jolipackage) peut être dispersé dans plusieurs jars ou
répertoires. (sauf effort pour l'empêcher, comme les jars sealed...) C'est
vrai pour toutes les ressources, et en particulier les fichiers de classes
qui sont accédés comme n'importe quelle ressource.

Le dossier lib n'a rien de particulier. Il est ou pas dans le classpath.
Dans le cas d'application web j2ee/servlet, les jars dans le répertoire
WEB-INF/lib et les classes des sou-répertoires de WEB-INF/classes sont
automatiquement ajoutés au classpath au chargement de l'application. C'est
un cas particulier.


"Yvon Thoraval" a écrit dans le message de
news:1gkrsee.177we5nlwkayiN%
Xavier Tarrago wrote:

Si le nom de ressource commence par /, c'est un nom absolu, il faut
qu'il


soit complet:

<code>
String imgLocation = "/yt/ui/images/flags/" + imageName +
".gif";


java.net.URL imageURL = getClass().getResource(imgLocation);
</code>

Pour les jars, je n'ai pas d'expérience, mais je pense que le fait que
les


fichiers soient dans deux jars différents ne devrait rien changer. Ce
qui


compte, c'est les noms des packages. Ils doivent être les mêmes dans les
deux jars. (penser à les mettre dans le classpath...)


OK, merci, ça roule, mais question annexe, si par exemple il me manque
une image dans mon images.jar est-ce que je peux la mettre dans le
dossier lib/ ainsi :

images/
path/to/
mon_image_manquante.gif

??? utile dans la période de mise au .
--
yt



Avatar
yvon.thoravalNO-SPAM
Xavier Tarrago wrote:

Il faut qu'il soit dans le classpath. getResource() permet d'accéder à des
fichiers qui sont dans le classpath. Après, un chemin dans le classpath (ex
com.mycomp.jolipackage) peut être dispersé dans plusieurs jars ou
répertoires. (sauf effort pour l'empêcher, comme les jars sealed...) C'est
vrai pour toutes les ressources, et en particulier les fichiers de classes
qui sont accédés comme n'importe quelle ressource.

Le dossier lib n'a rien de particulier. Il est ou pas dans le classpath.
Dans le cas d'application web j2ee/servlet, les jars dans le répertoire
WEB-INF/lib et les classes des sou-répertoires de WEB-INF/classes sont
automatiquement ajoutés au classpath au chargement de l'application. C'est
un cas particulier.


OK, merci, ça roule pour moi, maintenant...
--
yt