Pregunta

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.

¿Fue útil?

Solución

para crear un ImageIcon desde un archivo de imagen dentro de los mismos frascos 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 para java.net.JarURLConnection.

Otros consejos

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:

MiJAR.jar
- com (archivos de clase aquí)
- imágenes
----imagen.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") - que probé primero - me devolvió un InputStream nulo.

En netbeans 8.1 lo que he hecho es incluir la carpeta de iconos y otras imágenes llamada Recursos dentro de src carpeta en el archivo del proyecto.Así que cada vez que construyo Frasco archivo, la carpeta está incluida allí. El árbol de archivos debería ser así:

  • src (los archivos Java en los paquetes fuente están aquí)
  • ** PAQUETE QUE NOMBRASTE EN EL PROYECTO **

    • archivo.java
  • Recursos

    • imagen.jpg

El código debería ser como:

jToggleButton1.setIcon(new javax.swing.ImageIcon(this.getClass().getResource("/resources/image.jpg")));

Cargar una imagen desde un archivo Jar durante el tiempo de ejecución es lo mismo que cargar una imagen cuando se ejecuta desde IDE, por ejemplo, netbeans, la diferencia es que al cargar una imagen desde un archivo JAR, la ruta debe ser correcta y su distingue mayúsculas y minúsculas (muy importante).esto funciona para mi

 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úsculas, no funcionará.revisar espacios, mayúsculas y minúsculas y ortografía

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top