Eclipse exportó Runnable JAR que no muestra imágenes

Mis imágenes no se cargarán al ejecutar un archivo JAR exportado desde Eclipse.

Tengo las imágenes en un paquete de clase de recursos. También probé una carpeta de origen de imágenes sin suerte.

Funciona perfectamente cuando se carga desde Eclipse. Las imágenes están en el archivo JAR exportado, por lo que están exportando bien.

He intentado:

label.setIcon(new ImageIcon(MainFrame.class.getResource("/resources/header.jpg"))); 

También lo intenté:

 URL url = getClass().getResource("/resources/header.jpg"); Image image = Toolkit.getDefaultToolkit().getImage(url); label.setIcon(new ImageIcon(image)); 

Y:

 try { label.setIcon(new ImageIcon(ImageIO.read(getClass().getResource("/resources/header.jpg")))); } catch (IOException e1) { e1.printStackTrace(); } 

¿Alguna sugerencia?

Funciona bien para mí Compruebe lo que puede tener diferente.

Ejemplo 1: (recursos en src)

Pasos:

  1. Estructura de archivo

    enter image description here

  2. Código

     package com.stackoverflow.test; import java.net.URL; import javax.swing.*; // Wild carded for brevity. // Actual code imports single classes public class Main { public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable(){ public void run() { URL url = Main.class.getResource( "/resources/stackoverflow.png"); ImageIcon icon = new ImageIcon(url); JFrame frame = new JFrame(); frame.add(new JLabel(icon)); frame.pack(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } } 
  3. [Haga clic con el botón derecho en el proyecto] → [Exportar] → [Archivo de jar ejecutable] → [Configurar config de inicio]

    enter image description here

  4. Lucro

    enter image description here

FYI, la misma configuración se ejecuta en eclipse muy bien también


Ejemplo 2: (recursos no en src – pero en proyecto)

Pasos:

  1. Estructura de archivos (los recursos de notificación se ven como una carpeta simple)

    enter image description here

  2. Lo que tenemos que hacer ahora es poner los recursos en la ruta de comstackción. Lo que hace es poner todo en la carpeta (excluyendo la carpeta misma) en el classpath

    • Haga clic derecho en el proyecto y vaya a [Build Path] → [Configure Build Path]

      enter image description here

    • Desde la pestaña [Fuentes] en el cuadro de diálogo, seleccione [Agregar carpeta] y en el nuevo cuadro de diálogo, seleccione la carpeta [recursos]

      enter image description here

    • Ahora el contenido de la carpeta de recursos está en la ruta de comstackción (observe el pequeño paquete en la carpeta ahora

      enter image description here

  3. El nuevo código ya no usa el prefijo de recursos para la ruta

     URL url = Main.class.getResource("/stackoverflow.png"); 
  4. ¡Igual que los pasos 3 y 4 de arriba, y ganancias!


ACTUALIZAR

Configuración de inicio de configuración

Generalmente, una vez que ejecuta la clase (es decir, haga clic con el botón derecho en la clase y Ejecutar como aplicación Java), se configurará una configuración de ejecución. Necesitará esto para establecer como punto de inicio en el manifiesto. Pero aquí está cómo hacerlo manualmente.

Pasos:

  1. [Proyecto de clic derecho] → [Propiedades] → [Configuración de ejecución / depuración]

    enter image description here Puedes ver que ya tengo una configuración de ejecución (implícitamente configurada simplemente para ejecutar la clase). Pero para crear uno nuevo, seleccione [Nuevo] → [Aplicación Java]

  2. Cree un nombre para la configuración de ejecución y explore o escriba una clase de lanzamiento principal. En mi caso es la clase com.stackoverflow.test.Main

    enter image description here

  3. Ahora cuando exporta como se muestra en el ejemplo anterior, selecciona la configuración de ejecución

    enter image description here

  4. Ejecute el jar como arriba.


EDITAR

Resultado para verificar

Manifiesto:

 Manifest-Version: 1.0 Rsrc-Class-Path: ./ Class-Path: . Rsrc-Main-Class: com.stackoverflow.test.Main Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader 

Frasco extraído:

enter image description here

Encontré eso cuando cambiaste:

El paquete requiere bibliotecas en el contenedor generado

a

Extraiga las bibliotecas necesarias en el contenedor generado

en la configuración Configurar inicio, funcionó para mí.

Botón Extraer bibliotecas requeridas

Para crear un archivo JAR ejecutable desde Eclipse, podemos consultar el artículo “Creación de tarros ejecutables en Eclipse (u otro IDE … o a mano):” ( https://www.cefns.nau.edu/~edo/Classes /CS477_WWW/Docs/RunnableJarsinEclipse.html ), mencionó que necesitamos hacer cuatro cosas como

  1. Asegúrese de crear un paquete para nuestro código, no solo crear un proyecto en Eclipse
  2. Cree el subpaquete (subcarpeta) para nuestros archivos de recursos en el paquete principal de nuestro código (tenga en cuenta que el subpaquete está en el paquete principal, no solo en el proyecto)
  3. obtener todas las referencias de archivos de getResource () (obteniendo la referencia URL)
  4. Exportación de archivos como JAR ejecutable en Eclipse (Archivo -> Exportar … -> seleccionar archivos JAR ejecutables -> siguiente -> …)

Pero para el archivo de imagen en el código de ejemplo del artículo anterior solo crea ImageIcon, no crea la Imagen SWT, y hay muchas preguntas en Internet sobre cómo obtener SWT Image desde URL o cómo convertir ImageIcon a SWT Image, a continuación se muestra el código de ejemplo para obtener la Imagen SWT de la URL,

 Image imgSWT=null; // Image class is the SWT Image class ImageDescriptor imgDesc=null; java.net.URL imgURL = YourClassName.class.getResource("path/image_filename"); if (imgURL != null) { imgDesc = ImageDescriptor.createFromURL(imgURL); imgSWT = imgDesc.createImage(); } 

El problema era que tenía este proyecto en mi perfil de Windows … que tenía un “!” en él … (¡DeNitE! -> era el nombre de mi perfil de Windows)

Tan pronto como lo cambié a DeNitE (¡sin el!) Funcionó bien …

Otro trabajo alternativo es si pones tu archivo de recursos, un archivo .jar en la misma ubicación, debería funcionar. El único inconveniente es que debe tener los recursos con el archivo jar todo el tiempo.

Si eso no es un problema, puedes hacerlo de esta manera.

Tengo el mismo problema … Puedes usar esto …

 Image Icon= new ImageIcon(new WE4().getClass().getResource("IC.jpg")) 

Aquí WE4 es mi nombre de constructor de clase. Espero eso ayude.

A menos que tenga que tener sus archivos en el contenedor, esta es probablemente la forma más sencilla de hacerlo:

header = ImageIO.read(new File("./resources/header.jpeg"));

el encabezado tiene que ser una Imagen / Imagen Buffered. Esto va a la carpeta en la que se encuentra el archivo jar ejecutable y busca una carpeta llamada recursos. http://i.stack.imgur.com/x8xtO.png

Dos pasos simples:

1 – Agregue la carpeta a Build Path;

2 – Usa esto:

  InputStream url = this.getClass().getResourceAsStream("/load04.gif"); myImageView.setImage(new Image(url));