Pregunta

Actualmente estoy escribiendo un programa que tengo que enviar a un amigo como un frasco. El programa cuenta con imágenes que necesitan ser cargados para que el programa funcione correctamente y que lo quiero todo para estar contenido en el frasco. Actualmente no funciona de la jarra ejecutable o cuando lo ejecuto a través de línea de comandos. Funciona en NetBeans sin embargo.

Aquí está el código que estoy usando:

Para cargar la imagen que estoy utilizando:

protected ImageIcon createImageIcon(String path, String description)
{
 java.net.URL imgURL = getClass().getClassLoader().getResource(path);
 if (imgURL != null)
 {
     return new ImageIcon(Toolkit.getDefaultToolkit()
                  .getImage(imgURL),description);
 }
 else
 {
     System.err.println("Couldn't find file: " + path);
     return null;
 }
}

para la dirección URL también he intentado apenas

 getClass().getResource(path)

La línea donde se supone que la imagen que se cree es:

this.img =createImageIcon(File.separator+"."+File.separator
           +"resources"+File.separator+"tiles"+File.separator+"tile.png","tile");

Mi archivo JAR está configurado con la carpeta que contiene los archivos de clase y el recurso de carpetas tanto en el nivel superior de la misma.

He buscado en torno a la manera de resolver esto, pero no puedo encontrar nada que funcione.

Gracias.

¿Fue útil?

Solución

La URL evaluará a "/./resources/tiles/tile.png" que no tiene sentido (pero tal vez el ClassLoader que se utiliza cuando se ejecuta desde NetBeans tolera el error.)
Trate de dejar caer el "/./" inicial. También usted no necesita las referencias a File.separator como la cadena se trata como una dirección URL relativa y la barra diagonal es siempre válida.

Otros consejos

En lugar de utilizar /./resources/back_img.png, el uso resources/back_img.png con ClassLoader.
Aquí es ejemplo:

    String path = "resources/back_img.png";
    ClassLoader cl = ImageHandler.class.getClassLoader();
    URL imgURL = cl.getResource(path);
    //URL imgURL = ImageHandler.class.getResource(path);

    if (imgURL != null) {
        ImageIcon icon = new ImageIcon(imgURL, description);
        Image img = icon.getImage();
        Image sizedImg = img.getScaledInstance(width, height, Image.SCALE_DEFAULT);
        return new ImageIcon(sizedImg);
    } else {
        System.err.println("Couldn't find file: " + path);
        return null;
    }

A pesar de todo lo demás su código tiene la propiedad poco envidiable de ser a prueba de lento.

Pruebe algo como

URL x = get class.getclassloader.getresource(...)
If x == null
   Throw new defect "expected ... But it wasn't there"

Lo siento por el formato, pero el iPad hace que sea muy difícil de hacerlo bien.

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