auf Bilder im Jar-Archiv zugreifen

David.jar

Mitglied
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))
 
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:
Java:
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
 
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.
 
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.
 
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 ?
 
Zuletzt bearbeitet von einem Moderator:
java.io.FileInputStream.FileInputStream(String name)
:]

aber im prinzip möchte ich einfach nur eine Textur aus meinem Jar laden
 
Zuletzt bearbeitet:
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
 
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 :]
 
Zuletzt bearbeitet:
sind alle freiwillig hier und verschwenden unsere Zeit freiwillig, also nix zu entschuldigen ;-)
 

Zurück
Oben