Pfadangabe auf Bilddateien außerhalb der .jar

Epitaph

Mitglied
Hallo,

ich bin gerade dabei das 2D-Spieleprogrammierungstutorial, das ich hier auf dem Board gefunden habe, durchzugehen und wollte meine Zwischenergebnisse in eine Jar packen.
Beim Ausführen wird das Fenster ganz normal gestartet doch findet das Programm die .gif Datei nicht mehr. Nun wollte ich wissen, wie ich den Pfad angeben muss. Die .jar Datei befindet sich mit dem Ordner "src" in einem Ordner und in "src" befindet sich die .gif Datei.

Hier der Code:

Java:
  ...
    BufferedImage[] ship = loadPics("src/Ship1.gif", 3);
  ...
  private BufferedImage[] loadPics(String path, int pics)
  {
    BufferedImage[] anim = new BufferedImage[pics];
    BufferedImage source = null;
    
    URL pic_url = getClass().getClassLoader().getResource(path);

    try
    {
      source = ImageIO.read(pic_url);
    }
    catch(IOException e)
    {
    }
    
    for(int i=0; i<pics; i++)
    {
      anim[i] = source.getSubimage(i*source.getWidth()/pics, 0,
              source.getWidth()/pics, source.getHeight());
    }
    
    return anim;
  }

Und die Fehlermeldung:
Code:
Exception in thread "main" java.lang.IllegalArgumentException: input == null!
        at javax.imageio.ImageIO.read(Unknown Source)
        at GamePanel.loadPics(GamePanel.java:138)
        at GamePanel.doInitialisation(GamePanel.java:50)
        at GamePanel.<init>(GamePanel.java:40)
        at GamePanel.main(GamePanel.java:26)
Die Zeilen in der Fehlermeldung stimmen natürlich nicht aber zeigen eigentlich nur auf:
Java:
source = ImageIO.read(pic_url);
Habs mit verschiedenen Pfadangaben versucht und im Internet geschaut aber nichts nützliches gefunden :/
 
Zuletzt bearbeitet:
Hm ok danke. Ist aber ziemlich blöd wenn man mal nen Programm schreiben will, bei dem man bestimmte .txt Dateien oder Bilder austauschen können soll :/
Aber vllt hat ja noch jemand ne Alternative
 
Ok ich werds ma mit na Classpath in der Manifest versuchen. Hab mit der Manifest allerdings noch nichts gemacht und so. Ma schaun obs klappen wird^^
Newbie würd ich mich zwar net nennen aber unwissend denn ich weiß eig noch netma genau was ne Classpath is bzw. wo se genau hinzeigen soll xD
Aber wie gesagt ma schaun^^
 
Mit Manifest ist eigentlich relativ einfach.

z.B.
Code:
Class-Path: .

sagt aus, dass der Ordner, in dem das JAR File liegt mit im Classpath ist. Wenn jetzt dort ein Bild abc.jpg liegt, kann man das über

Java:
getClass().getResourceAsStream("/abc.jpg");

laden.
 
wenn man ein JAR hat und daneben austauschbare daten liegen haben will kann man den absoluten pfad ganz einfach ermitteln ...

Java:
File dir=new File(this.getClass().getProtectionDomain().getCodeSource().getLocation().toURI()).getParentFile();
sinnvoll wäre die entsprechenden files natürlich noch in sub-dirs zu organisieren ... aber das wäre jetzt das dir in dem das JAR liegt ... ohne getParentFile() würdest du nur direkt ein objekt auf das JAR selbst bekommen ...
 
So danke für die Hilfe. Hat nu mit "Class-Path: ." in der Manifest geklappt 🙂
Und das mit dem Verzeichnis herausfinden is auch ganz net aber da muss ich mir den Code nochma genauer anschaun ;D
Vielen Dank euch!
 

Zurück
Oben