Probleme mit .Jar in Verbindung mit Bildern

Hawk3345

Neues Mitglied
Hallo Java Forum ich weiß das es zu diesem Thema schon viele Threads gibt aber leider konnte mir keines davon was ich hier und auch bei Google gefunden habe wirklich helfen???:L

Es geht darum ich bin gerade dabei ein eigenes Spiel zu Programieren und natürlich möchte ich das es dann auch in einer ausführbaren datei vorligt also .jar datei.

Ich habe heute schon den ganzen Tag versucht das hinzubekommen und hatte keine Erfolg.

Ich speichere die Bilder in BufferedImages

so sieht das was interessant für den Thread sein durfte aus.

Java:
 BufferedImage[] heli=this.loadPics("pics/Jet.png",1);

Die Methode loadPics sieht so aus

Java:
private BufferedImage[] loadPics(String path,int pics){
    BufferedImage[] anim=new BufferedImage[pics];
    BufferedImage source=null;
    this.path=path;
    
    URL pic_url=this.getClass().getClassLoader().getResource(path);
    
    try{
      source=ImageIO.read(pic_url);
    }
    catch(IOException e){}
    for(int y=0;y<pics;y++){
      anim[y]=source.getSubimage(y*source.getWidth()/pics,0,
        source.getWidth()/pics,source.getHeight());
    }
    return anim;
    
    
  }

Die Bilder werden wie folgt aufgerufen
Java:
 public void drawObjects(Graphics g) {
   g.drawImage(pics[z.B 1 ],(int)x,(int) y,null);
  }

Meine Bilder sind in der .jar Datei vorhanden

Die Hirachi sieht wie folgt aus
Spiel/pics/Bilder.gif

Ich habe auch schonmal die Pfadangabe /pics/Jet.png benutzt auch ein Fehlschlag

So ich hoffe ich hab euch jetzt alles erzählt was ihr wissen müsst um den Fehler zu finden.
Von mir aus könnt ihr auch Schlagworte nennen die mir weiterhelfen.
Ihr könnt natürlich auch ein anderes Verfharen nennen um eine Ausführbare datei zu erstellen.



Gruß Hawk
 
Hast Du auch schon [c]"Spiel/pics/Jet.png"[/c] versucht zu laden? Wenn Du über [c]getClassLoader().getResource(…)[/c] Resourcen lädst, dann muss der Pfad genau so wie im JAR-File sein. Sag doch einfach mal [c]jar -tf meinejardatei.jar[/c] und guck, wie die Bilder im JAR liegen. Genau das was da angezeigt wird musst Du auch als Pfad im Programm übergeben.

Ebenius
 
Oder ".getClassLoader()" weglassen, dann sollte der Pfad "pics/Jet.png" passen:
Java:
URL pic_url=this.getClass().getResource(path);
 
"Spiel" könnte das Projektverzeichnis sein. Oder die Klasse liegt in "Spiel.Program.Klassenname", während die Bilder relativ zu "Spiel.pics" liegen.

Ebenius
 
Ich glaube nicht, dass das Projektverzeichnis im jar zu finden ist. "Spiel.Program.Klassenname" ist möglich. Der Pfad für das Bild wäre dann "/Spiel/pics/Jet.png".
 
Erstmal danke für die vielen Antworten und sry das ich das Package Groß geschrieben hab, lerne Java auch in der Schule und da hat mich der Lehrer noch nie darauf hingewiesen, dass man Package Namen kleinschreibt.
Also erstmal danke für den Hinweis werde mich bemühen dies in Zukunft zu übernhemen.

So jetzt zu meinem eigentlichen Problem was ich hatte, dort hat das .getClassLoader() weglassen super funktioniert, jetzt lädt er endlich die Bilder auch in der .jar file danke auch dafür.

Doch eine Frage habe ich noch, ich habe auf der Suche nach dem Fehler in einem anderen Forum gelesend, das diese .jar file nicht auf jedem Rechner ausführbar währe, ist da was dran und wenn ja auf welchen nicht, irgendwas von Admin hab ich gelesen, ich wäre euch echt dankbar wenn ihr mir dies benatworten könntet, ihr könnt auch ein Link posten wo dies erklärt ist.


Gruß Hawk
 
Grundsätzlich sind selbständige JAR-Dateien mit [c]java -jar meinejardatei.jar[/c] aus der Konsole auf jedem System ausführbar. Was Du genau in einem anderen Forum gelesen hast, weiß ich nicht. Es kann sein, dass damit gemeint ist, dass ein Doppelklick auf die JAR-Datei nicht überall standardmäßig funktioniert. Das kann grundsätzlich auf jedem System so sein… Genauso wie man irgendwo einstellen kann, womit eine [c].txt[/c]-Datei ausgeführt wird, kann man einstellen, dass [c].jar[/c]-Dateien mit [c]java -jar[/c] (im Windows: [c]javaw -jar[/c]) aufgerufen werden müssen. Und natürlich muss eine JRE installiert sein, damit das funktioniert.

Ebenius
 

Zurück
Oben