Frage

Ich schreibe zur Zeit ein Programm, dass ich als ein Gefäß an einen Freund zu senden. Das Programm verfügt über Bilder, die für das Programm richtig funktioniert und ich will alles enthalten sein in dem ein Glas geladen werden müssen. Derzeit funktioniert es nicht aus dem ausführbaren Glas oder, wenn ich es über die Befehlszeile ausgeführt werden. Es funktioniert in Netbeans jedoch.

Hier ist der Code verwende ich:

Um das Bild zu laden Ich bin mit:

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

für die URL ich auch habe versucht, nur

 getClass().getResource(path)

Die Linie, wo das Bild soll erstellt werden soll:

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

Meine JAR-Datei ist Setup mit dem Ordner, der die Klassendateien und die Ressource-Ordnern sowohl auf der obersten Ebene davon enthält.

Ich habe nach Möglichkeiten gesucht, um dies zu lösen, aber ich kann nichts, dass die Arbeiten finden.

Danke.

War es hilfreich?

Lösung

Ihre URL wird "/./resources/tiles/tile.png" bewerten, die nicht sinnvoll (aber vielleicht die ClassLoader, die verwendet wird, wenn Sie von NetBeans ausführen duldet den Fehler.)
Versuchen Sie, die anfängliche "/./" fallen. Auch brauchen Sie nicht die Verweise auf File.separator als die Zeichenfolge als eine relative URL behandelt wird, und der Schrägstrich ist immer gültig.

Andere Tipps

Instead of using /./resources/back_img.png, use resources/back_img.png with ClassLoader.
Here is example :

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

Despite anything else your code has the unenviable property of being fail-slow.

Try something like

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

Sorry for the formatting, but the iPad makes it too hard to do it right.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top