# auf Bilder im Jar-Archiv zugreifen



## David.jar (23. Jan 2012)

hallo :]
ich habe es jetzt endlich geschafft mein projekt als ausführbare jar datei zu exportieren.

leider kann ich meine ressourcen wie bilder und sounds nun nicht direkt darin speichern,
sondern muss per absoloutem pfad auf sie zugreifen, nämlich so:

     textureBank.LoadTexture("C:/textures/player.png", "player");


giebt es eine möglichkeit wie ich das alles einfach ins jar stecken kann und per
     textureBank.LoadTexture("textures/player.png", "player");
laden kann?

bei dieser variante meldet mir das cmd momentan nämlich dass die datei nicht gefunden werden konnte.

danke schonmal für eure potentielle hilfe :]

hier noch der wesentliche befehl der. textureBank
TextureLoader.getTexture("PNG", new FileInputStream(path))


----------



## eRaaaa (23. Jan 2012)

Smartly load your properties - JavaWorld
gleiche gilt auch für andere Files.
Oder auch mal hier die createImageIcon-Methode anschauen!


----------



## Gast2 (23. Jan 2012)

Ja, das geht:
Smartly load your properties - JavaWorld
Da gehts zwar um property files, aber das Prinzip ist das gleiche.


----------



## L-ectron-X (24. Jan 2012)

Grafikdateien laden und anzeigen ? Byte-Welt Wiki ?

oder Nachbar-Thema: http://www.java-forum.org/java-basics-anfaenger-themen/130723-bilder-jar-anzeigen-lassen.html


----------



## theuserbl (24. Jan 2012)

David.jar hat gesagt.:


> giebt es eine möglichkeit wie ich das alles einfach ins jar stecken kann und per
> textureBank.LoadTexture("textures/player.png", "player");
> laden kann?




Also, wenn die Methode nicht statisch ist, dann kannst Du ein Bild folgendermaßen laden:
	
	
	
	





```
bildname = new ImageIcon(this.getClass().getResource("/resourcen/Images/Skin/bildname.png"));
```

Das mußt Du nun dementsprechend für Dein Programm anpassen. Am besten in der Methode "LoadTexture".
Denn LoadTexture selbst, erhält als Übergabe ja nur zwei String-Werte.

Grüße
theuserbl


----------



## Kakulukiam21 (24. Jan 2012)

Hey, 

sollte das nicht im Prinzip genau so funktionieren wie Bilder anzeigen lassen?

Ich habe es hier schon weitesgehend ausführlich erklärt, ansonsten frag einfach noch mal nach  

Kleiner Tipp im Vorraus: Wenn du die gewünschten Datein im Projektordner versuch mal im Eclipse -> Refresh und exportiere noch mal alles.


----------



## David.jar (25. Jan 2012)

Hallo leute,
ich danke euch schonmal für die ganze freundliche hilfe, finde ich echt toll :]

ich versuche jetzt also meine texturen über 
texture = TextureLoader.getTexture("PNG",(FileInputStream) this.getClass().getResourceAsStream("textures/player.png"))

zu bekommen, anstatt wie vorher mit

texture = TextureLoader.getTexture("PNG", new FileInputStream("C:/textures/player.png"))
(funktionierende variante)


bei der neuen variante bekomme ich nun aber:
java.io.BufferedInputStream cannot be cast to java.io.FileInputStream,
obwohl mein eclipse mir da keinen fehler anzeigt :<

ich würde nur ungern auf die variante mit den ImageIcons umspringen, 
da mein Programm über open GL mit Textures funktioniert.

zudem besteht parallel noch fast das gleiche Problem mit den sounds,
die brauche ich nämlich am besten als AudioInputStream,

AudioInputStream audioInputStream = 
        			AudioSystem.getAudioInputStream((AudioInputStream) this.getClass().getResourceAsStream("sounds/laser.wav"));

liefert fehlermeldung:
java.io.BufferedInputStream cannot be cast to javax.sound.sampled.AudioInputStream
obwohl sich hier eclipse ebenfalls nicht beschwert.

entschuldigt bitte wenn ich eure hilfe völlig falsch verstanden habe,
aber es macht mich momentan etwas stutzig dass dort umwandlungsfehler entstehen die
eclipse nicht bemerkt.


----------



## bygones (25. Jan 2012)

getResourceAsStream liefert dir einen InputStream...den kannst du nicht einfach in einen anderen Stream casten...

was fuer einen InputStream braucht denn die lib methode die du aufrufst ?


----------



## David.jar (25. Jan 2012)

java.io.FileInputStream.FileInputStream(String name) 
:]

aber im prinzip möchte ich einfach nur eine Textur aus meinem Jar laden


----------



## bygones (25. Jan 2012)

nunja, wenn die lib das so bescheiden macht

musst du den kommenden Stream in ein tmp file speichern und dann kannst du auf dem ein FileInputStream oeffenen, den du der methode mitgibst


----------



## David.jar (25. Jan 2012)

GELÖST aber thema verfehlt, sorry:
vielen dank für eure liebe hilfe, aber ich bin jetzt durch einen völligen zufall auf die lösung gekommen,
die ich der vollständigkeitshalber nun hier festhalten werde:

texture = 
    TextureLoader.getTexture("PNG", new FileInputStream("textures/player.png"))

bezieht sich nach dem exportieren als ausführbare jar datei
 NICHT auf einen ordner textures IM jar,
sondern auf einen ordner textures der im selben ordner wie das jar liegt :]

das selbe gilt für 

AudioInputStream audioInputStream = 
        	AudioSystem.getAudioInputStream(new File("sounds/" + soundName + ".wav"));

ich entschuldige mich für meine unwissenheit, wollte nicht eure zeit stehlen :]


----------



## bygones (25. Jan 2012)

sind alle freiwillig hier und verschwenden unsere Zeit freiwillig, also nix zu entschuldigen ;-)


----------

