Domanda

Attualmente sto scrivendo un programma che ho bisogno di inviare ad un amico, come un vaso. Il programma ha le immagini che devono essere caricati per il programma per funzionare correttamente e voglio tutto per essere contenuta in un vasetto. Attualmente non funziona dal jar eseguibile o quando l'eseguo attraverso la linea di comando. Funziona in netbeans però.

Ecco il codice che sto usando:

Per caricare l'immagine che sto usando:

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;
 }
}

per l'URL ho provato anche solo

 getClass().getResource(path)

La linea dove si suppone che l'immagine da creare è:

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

Il mio file jar è configurato con la cartella che contiene i file di classe e la risorsa della cartella sia sul piano superiore di esso.

Ho cercato in giro per modi per risolvere questo, ma non riesco a trovare tutto ciò che funziona.

Grazie.

È stato utile?

Soluzione

L'URL valuterà a "/./resources/tiles/tile.png", che non ha senso (ma forse la ClassLoader che viene utilizzato quando si esegue dal NetBeans tollera l'errore.)
Prova a far cadere il "/./" iniziale. Inoltre non è necessario i riferimenti alla File.separator come la stringa viene trattato come un URL relativo e la barra è sempre valido.

Altri suggerimenti

Invece di usare /./resources/back_img.png, uso resources/back_img.png con ClassLoader.
Ecco esempio:

    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;
    }

Nonostante qualsiasi altra cosa il codice ha la proprietà non invidiabile di essere fail-lento.

Provare qualcosa di simile

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

Ci scusiamo per la formattazione, ma l'iPad rende troppo difficile farlo bene.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top