Java Swing: visualización de imágenes desde un Jar

Resuelto jjnguy asked hace 16 años • 5 respuestas

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.

jjnguy avatar Aug 28 '08 03:08 jjnguy
Aceptado

Para crear un ImageIconarchivo de imagen dentro de los mismos archivos jar, se carga su código:

new javax.swing.ImageIcon(getClass().getResource("myimage.jpeg"))

Class.getResourcedevuelve una URL de un recurso (o null!). ImageIcontiene 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.

Tom Hawtin - tackline avatar Sep 05 '2008 11:09 Tom Hawtin - tackline

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

Tim Frey avatar Aug 27 '2008 20:08 Tim Frey

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.

ekerner avatar Mar 12 '2013 05:03 ekerner