direcciones relativas y relaciones relativas en un .jar

Isabelina
26 de Agosto del 2004
Tengo un problema al cargar imágenes y sonidos. Yo las cargaba de la siguiente manera, la cual me dijeron en este foro ya hace tiempo.

ImageIcon imagen = new ImageIcon (getClass().getClassLoader().getResource(\"./imagenes/im.jpg\"));

Con esto conseguía cargar imágenes tan solo con una dirección relativa, ya que me parecía algo cutre hacerlo con direcciones absolutas, ya que o bien tendría que tener internet para cargarlas o tener mi trabajo en un directorio fijo.
Acabo de terminar dicho trabajo y al ir a hacer un .jar resulta no se por que esto me da un puntero nulo. Pero rápidamente me di cuenta de que tan solo con poner la dirección relativa era suficiente, al menos que lo ejecutase desde consola con esta estructura.

java –jar “dirección absoluta, desde el directorio raíz ”

Si alguien sabe como solucionarlo espero que me lo diga, sino queda como reflexión, ya que no me jode mucho mi trabajo ya que con decir que para ejecutarlo o bien lo haga en modo gráfico o si es desde consola que se haga desde el directorio donde se encuentra dicho archivo .jar.

Lo que si me gustaría saber, es como decir que en vez de cargar las imágenes y sonidos desde la carpeta donde se encuentra el .jar desde dentro de el. Es decir, que en vez de tener en un directorio el .jar y carpetas con imágenes/sonidos, tenerlo todo metido en el . jar. Pero no me mal interpreten no quiero saber como se meten, que es evidente, sino lo que quiero es saber como lo llamaría es decir si quiero llamar a una imagen im que está en una carpeta imágenes.
ImageIcon imagen = new ImageIcon ((\"./imagenes/im.jpg\"); Que debo de poner delante de “./imágenes/im.jpg”.

Muchas gracias por atenderme.

Luis
26 de Agosto del 2004
Hola Isabelina.
Digamos que tienes una carpeta raiz que la nombramos como "com" dentro de esta tenemos otra nombrada como "recursos" y otra llamada "clases", ¿ok? Partiendo de esta estructura de directorios y si estuvieramos intentando cargar una imagen que se encuentra en "recursos" dentro de una clase que se encuentra en "clases" se pondria de la siguiente manera:
jLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/recursos/imagen.gif")));

La estructura de directorios es el patron a seguir para establecer el path relativo de la imagen.
Lo unico que no es posible es utilizar un .jar dentro de un jar y usarlo (al menos yo no he podido), lo he tenido que sacar al mismo nivel de directorio que el mi jar. Espero esto te ayude. Si tienes alguna duda mandame un email. :-D