Estoy creando una aplicación awt/swing con el JDeveloper. La idea es crear después un jar ejecutable para distribuirla. En uno de los formularios quiero incluir una imagen. ¿Cómo puedo referenciar a la imagen de tal forma que esta vaya después incluida en el jar ejecutable? Icon imagen=new ImageIcon("img1.gif");
Para gestionar la carga de recursos en mis aplicaciones suelo crearme una clase de apoyo de forma que si alguna vez necesito cambiar la forma de cargarlos (por ejemplo, paso de cargar las imágenes de un jar a obtenerlas de una dirección web) solo tengo que tocar un punto de la aplicación. Además de esto, como en una misma aplicación se suele utilizar la misma imagen varias veces, podemos evitar la carga repetitiva de la imagen mediante una pequeña caché. Te paso un ejemplo de cómo cargo los recursos, mediante una clase que llamo ResourceManager y a continuación un ejemplo de su uso: import java.net.URL; import java.util.Hashtable; import javax.swing.ImageIcon; public class ResourceManager { private static ResourceManager instance = null; private Hashtable tablaCache = null; private ResourceManager() { tablaCache = new Hashtable(); } public static ResourceManager getInstance() { if (instance == null) instance = new ResourceManager(); return instance; } public ImageIcon getImageByName(String imageName) { ImageIcon retorno = null; try { retorno = (ImageIcon)tablaCache.get(imageName); if(retorno == null) { retorno = new ImageIcon(getClass().getResource(imageName)); tablaCache.put(imageName, retorno); } } catch (Exception e) { System.out.println("[ResourceManager]ERROR obteniendo "+imageName+": " + e); } return retorno; } } Y se puede utilizar como: jpanel1.setBgImage(ResourceManager.getInstance().getImageByName("bg_toolbar.gif").getImage());
Ya no necesito la respuesta aunque agradezco tu interés. Creo que tu respuesta es interesante aunque no es lo que buscaba. Necesitaba que la aplicación jar generada tuviera sus imágenes incluidos de tal forma que la aplicación sea totalmente portabla a cualquier carpeta, sin necesidad de tocar nada de la aplicación. Un saludo.