2016-07-03 21 views
2

Ich versuche, ein Bild aus einem Ordner mit dem Namen Benutzerdefiniert zu laden, in dem der Benutzer Bilder ablegt. Hier ist die Methode, die ich verwendet, um Bilder zu laden:Laden von Java-Bildern aus .jar-Datei

public BufferedImage getCustImg(String path){ 
    BufferedImage img = null; 
    String s = get.getProgramPath(); 
    path = path.trim(); 
    String s2 = s + "\\Custom\\" + path + ".png"; 

    try{ 
     img = ImageIO.read(this.getClass().getResource(s2));//gets image from file path 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return img; 
} 

Hier ist der Programmpfad Methode

public String getProgramPath(){ 
    File f = new File("./Resources/Sprtes/blank.png"); 
    String s = f.getAbsolutePath(); 
    String[] stringArr = s.split("Resources"); 
    String s2 = stringArr[0]; 
    s2 = s2.substring(0, s2.length() - 3); 
    return s2; 
} 

Wenn ich den Code funktioniert alles einwandfrei laufen, aber das Problem erscheint, wenn ich versuche, das Programm auszuführen, wie eine .jar-Datei. Wenn ich es mit einer JAR-Datei ausführe, wird das Bild nicht geladen. Dies ist, wo die benutzerdefinierten Ordner in Bezug auf die .jar-Datei ist:

File Structure

Wie soll ich das Verfahren, um sicherzustellen, ändern, dass das funktioniert?

+1

ändern java doc Bitte lesen für 'Class.getResource()'. –

+1

Ich denke, dieser Beitrag könnte Ihre Frage beantworten. http://stackoverflow.com/questions/38167205/loading-images-in-the-exported-jar-file – Olithegoalie

Antwort

1

Also habe ich das Problem dank Luke Lee und Olithegoalie,

img = ImageIO.read(this.getClass().getResource(s2)); funktioniert nicht, wenn der Pfad außerhalb des jar geht also musste ich es

public BufferedImage getCustImg(String path){ 
    BufferedImage img = null; 
    String s = get.getProgramPath(); 
    path = path.trim(); 
    String s2 = s + "\\Custom\\" + path + ".png"; 
    try{ 
     img = ImageIO.read(new File(s2)); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return img; 
}