libro - Java Swing: visualización de imágenes desde dentro de un tarro
java swing tutorial pdf español (5)
Cargar imagen desde el archivo Jar durante el tiempo de ejecución es lo mismo que cargar la imagen cuando se ejecuta desde IDE, por ejemplo, netbeans, la diferencia es que al cargar la imagen del archivo JAR la ruta debe ser correcta y sensible a mayúsculas (muy importante). Esto funciona para mí
image1 = new javax.swing.ImageIcon(getClass().getResource("/Pictures/firstgame/habitat1.jpg")); img = image1.getImage().getScaledInstance(lblhabitat1.getWidth(), lblhabitat1.getHeight(), Image.SCALE_SMOOTH); lblhabitat1.setIcon(new ImageIcon(img));
si p en "/ Pictures /firstgame/habitat1.jpg" está en minúscula, no funcionará. verificar espacios, casos y ortografía
Cuando ejecuto una aplicación Java desde eclipse, mi ImageIcon aparece muy bien.
Pero después de crear un frasco, la ruta a la imagen obviamente se arruina.
¿Hay alguna manera de extraer una imagen del contenedor en tiempo de ejecución para poder abrirla? O, ¿hay una mejor manera de hacer esto?
Me gustaría distribuir un solo archivo jar si es posible.
En netbeans 8.1, lo que he hecho es incluir la carpeta de iconos y otras imágenes llamadas Recursos dentro de la carpeta src en el archivo del proyecto. Entonces cada vez que construyo el archivo Jar , la carpeta se incluye allí. El árbol de archivos debería ser así:
- src (los archivos Java en paquetes de origen están aquí)
** PAQUETE QUE HA NOMBRADO EN EL PROYECTO **
- archivo.java
Recursos
- image.jpg
El código debería ser como:
jToggleButton1.setIcon(new javax.swing.ImageIcon(this.getClass().getResource("/resources/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 trabajando tanto en ejecución jar y sin enmarañar (es el término técnico).
BTW getClass().getClassLoader().getResourceAsStream("/img/bg.png")
- que probé primero - me devolvió un InputStream nulo.
Puedes probar algo como:
InputStream stream = this.getClass().getClassLoader().getResourceAsStream("/images/image.jpg");
En su archivo JAR, puede tener una estructura de directorios de:
MyJAR.jar
- com (archivos de clase aquí)
- imágenes
---- image.jpg
Para crear un ImageIcon
partir de un archivo de imagen dentro de los mismos jarrones, 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 contenedor que no esté en su "classpath", consulte la documentación de java.net.JarURLConnection
.