Java Swing: visualización de imágenes desde un Jar
Cuando ejecuto una aplicación Java desde eclipse, mi ImageIcon aparece bien.
Pero después de crear un frasco, el camino hacia la imagen obviamente se estropea.
¿Hay alguna manera de extraer una imagen del frasco en tiempo de ejecución para luego poder abrirla? ¿O hay una mejor manera de hacer esto?
Me gustaría distribuir un único archivo jar si es posible.
Para crear un ImageIcon
archivo de imagen dentro de los mismos archivos jar, se carga su código:
new javax.swing.ImageIcon(getClass().getResource("myimage.jpeg"))
Class.getResource
devuelve una URL de un recurso (o null
!). ImageIcon
tiene constructores que se cargan desde una URL.
Para construir una URL para un recurso en un jar que no está en su "classpath", consulte la documentación de java.net.JarURLConnection
.
Puedes probar algo como:
InputStream stream = this.getClass().getClassLoader().getResourceAsStream("/images/image.jpg");
En su archivo JAR, es posible que tenga una estructura de directorios de:
MyJAR.jar
- com (archivos de clase aquí)
- imágenes
----image.jpg
Esto me funciona para cargar y configurar la imagen de fondo del panel de contenido:
jar (o ruta de compilación) contiene:
- com
- img
---- bg.png
java contiene:
JFrame f = new JFrame("Testing load resource from jar");
try {
BufferedImage bg = ImageIO.read(getClass().getResource("/img/bg.png"));
f.setContentPane(new ImagePanel(bg));
} catch (IOException e) {
e.printStackTrace();
}
Probado y funcionando tanto en ejecución jar como sin jard (ese es el término técnico).
Por cierto getClass().getClassLoader().getResourceAsStream("/img/bg.png")
, lo que probé primero, me devolvió un InputStream nulo.