2009-07-08 95 views
21

Estoy usando algunas imágenes en JFrame, he dado una ruta para cargar la imagen en el panel del marco, pero cuando hice el archivo jar de la aplicación no muestra imágenes.
¿Dónde debería colocar la imagen?
¿Cómo debo especificar la ruta?Agregar imagen a JAR Java

setIconImage(Toolkit.getDefaultToolkit().getImage(
       "D:\\RFT\\src\\dailogBox\\dump.jpg")); 

como esto he hecho.

Respuesta

1

Hay muchas maneras, por ejemplo, hacer una carpeta llamada recursos en su archivo jar y hacer referencia a sus imágenes a partir de ahí con una ruta relativa ....

+0

he pegado la imagen dentro de la carpeta fuente, ¿cómo establecer la ruta relativa? –

0

Agregar la imagen en su frasco como un recurso, entonces (suponiendo que el jar esté en su classpath), use el cargador de clases al load it as a stream.

+2

¿me puede dar un ejemplo para esto? –

+0

getClass(). GetResourceAsStream ("/ icons/closed_folder_small.png"); –

41

Primer paso: coloque su imagen en una ubicación definida en su archivo JAR. Si lo coloca en la carpeta src, tal vez su IDE o su herramienta de construcción lo empaquetará automáticamente en el JAR. De lo contrario, verifique la documentación de su IDE/herramienta de construcción, en qué ubicación debe ubicarla.

Segundo paso: Acceda al archivo desde su programa. Supongo que lo pones en el paquete (la ruta en tu JAR) package1/package2 y el archivo se llama dump.jpg. En ese caso se llama:.

setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("/package1/package2/dump.jpg"))); 

getClass() getResource (...) devuelve una dirección URL para un recurso en la ruta de clases. Comienza la ruta en la ruta de clase con un '/' y usa la ruta completa/paquetes a su recurso, separados por '/'.

+0

acaba de resolver este mismo problema para mí. Gracias :) – nedlud

+0

@Mnementh ¿Cómo puede funcionar esto si mi BufferedImage es estática? – Kareem

+3

@KareemMesbah, simplemente lo mencionaría como MyClass.class.getResource ("/ ruta/a/archivo.jpg") – haventchecked

-2

La manera más fácil de hacerlo es tener la carpeta en la que se encuentra su imagen en paralelo al archivo jar. Ejemplo:

Say en el código se llama a la imagen como esta:

pic = new ImageIcon("Pics/buttonpic.jpg"); 

Esto significa que su imagen sería llamado buttonpic y se encuentra en una carpeta llamada fotos en el directorio del proyecto. Ahora, después de hacer su archivo jar, copie esa carpeta Pics en la misma carpeta donde está ubicado su archivo jar.

Ejemplo: si su archivo jar está ubicado en su escritorio, coloque la carpeta Pics en el escritorio. Ahora cuando ejecuta el archivo jar, sus imágenes funcionarán correctamente. Ahora, para cubrir el hecho de que necesita tener su carpeta Pics al lado de su archivo jar, puede crear una nueva carpeta y colocar en esa carpeta su jar y la carpeta Pics. A continuación, haga clic con el botón derecho en el contenedor y cree un acceso directo; a continuación, coloque el acceso directo en el escritorio o donde desee tener solo el archivo jar y coloque la nueva carpeta que creó en el lugar donde desee ocultarla.

+0

Creo que tiene esos votos bajos porque la forma preferida es almacenar todos sus activos en el archivo JAR con la aplicación. De esta forma, debe distribuir solo un archivo. – Matka

2

En primer lugar crear un paquete (Di imágenes) en los paquetes fuente

copia todas sus imágenes a este paquete (cuando se crea un paquete, una carpeta en el nombre de su paquete será creado dentro de la carpeta src del proyecto , por lo que copiar imágenes a ella)

puede acceder a sus imágenes desde su programa como

Ejemplo 1:

 this.setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("/images/yourimagename"))); 

Ejemplo 2:

 URL imageurl = getClass().getResource("/images/imagename");//assuming your package name is images 
     Image myPicture = Toolkit.getDefaultToolkit().getImage(imageurl); 
     JLabel piclabel = new JLabel(new ImageIcon(myPicture)); 
     piclabel.setBounds(0,0,myPicture.getWidth(null),myPicture.getHeight(null)); 

Ahora utilice este piclabel JLabel

6

esta es la mejor manera de manejar todas las imágenes e iconos en un frasco de aplicaciones.

Una vez que haya comprimido todas sus imágenes e íconos en su propio archivo JAR - Configure su ruta de compilación agregando el archivo JAR de imágenes a la pestaña de sus bibliotecas para que ahora esté incluido en su classpath.

Entonces sólo tiene que utilizar los siguientes 3x líneas de código en el inicio de su Constuctor para acceder a cualquier imagen que necesita para cualquier cosa, incluyendo una imagen SystemTray que no acepta los simples de ImageIcon como su icono principal (raro lo sé) . Las líneas 3x son:

URL iconUrl = this.getClass().getResource("/image-iconb.png"); 
    Toolkit tk = this.getToolkit(); 
    someimgicon = tk.getImage(iconUrl); 

(someimgicon es sólo un declarado variable de imagen constructor) Ahora se puede establecer un icono ventana de la manera más simple:

setIconImage(someimgicon); 

y al mismo tiempo, utilice la misma variable al configurar System TrayIcon declarando:

trayIcon = new TrayIcon(someimgicon, "SystemTray Demo", popupMenu); 

Lo anterior le permite declarar imágenes o ImageIcons fácil y centralmente sin correr el riesgo de no mantener los recursos de imágenes en el lugar correcto. Lo mantiene agradable y ordenado, con el JAR que contiene todas sus imágenes compiladas automáticamente en tiempo de ejecución y distribución de su programa.

Como beneficio adicional, una vez que el JAR se ha registrado en la ruta de clases - se puede seguir añadiendo otras imágenes en la misma JAR en cualquier momento sin ninguna queja también - Todo funciona y las imágenes agregadas están disponibles al instante a su aplicación

Mucho mejor en mi opinión.

+0

Deberíamos comprimir TODAS nuestras imágenes e íconos en su propio archivo JAR, y luego hacer que nuestro IDE cree otro archivo JAR que encapsule el archivo JAR original? ¡¿Qué?! Por qué – Hatefiend

0

en NetBeans 8.1 Lo que he hecho es incluir la carpeta de iconos y otras imágenes llamada Recursos dentro de la carpeta src en el archivo de proyecto. Entonces cada vez que construyo el archivo Jar la carpeta está incluida allí.El árbol de archivos debe ser como este:

  • src (archivos de Java en los packges de origen están aquí)
  • ** PAQUETE USTED nombrado en PROYECTO **

    • file.java
  • Recursos

    • image.jpg

El código debe ser como:

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