Erste Schritte Images bei JAR mitexportieren

DaCrazyJavaExpert

Bekanntes Mitglied
Hey,
in meinem Programm habe ich in einem Ordner parallel zum src-Ordner alle meine Bilder. Wenn ich mein Projekt allerdings als JAR-Datei exportiere fehlen die Bilder.
Im Anhang hab ich die Struktur. Ich hole mir die Bilder aus dem images-Ordner so:
Java:
images/GrundCookieClicker.png
//Also das ist der relative Pfad, den ich im Code angebe.
Wenn ich das Programm in Eclipse laufen lasse, wird auch alles angezeigt. Muss ich den Pfand irgendwie ändern oder Die Bilder in einen anderen Ordner/Verzeichnis packen (eigentlich will ich sie so strukturiert im images-Ordner lassen)?
Vielen Dank für potentielle Hilfe!
 

Anhänge

  • Joiahwusik.PNG
    Joiahwusik.PNG
    11,5 KB · Aufrufe: 46

Thallius

Top Contributor
Erzeuge in Eclipse im Project-Explorer einen neuen Ordner "Images". Öffne den Finder oder Windows Explorer und ziehe die Bilder aus Ihrem jetzigen Ordner auf diesen Ordner in Eclipse und wähle "Link to Files" wenn Du unbedingt willst das die Bilder in dem anderen Ordner bleiben oder "Copy to Files" wenn nicht, was ich persönlich bevorzugen würde, da du dann alles was zusammen gehört auch zusammen in einem Projektordner hast.

Danach kannst du das .jar exportieren.

Gruß

Claus
 

Meniskusschaden

Top Contributor
Wenn du ihn als Source Folder erstellst, müsste sein Inhalt automatisch in der jar landen. Einen normalen Ordner kannst du auch nachträglich umstellen (Irgendwo bei Build Path).
 

mrBrown

Super-Moderator
Mitarbeiter
Sicher, dass es nicht in der jar landet? hast du die mal entzippt?

Im Code musst du die, wenn sie in der Jar liegen, als Resource laden. Wie hast du das denn bisher umgesetzt?
 

DerShirkTV

Mitglied
Lieber DaCrazyJavaExpert,
Genau diese Problem hatte ich auch schon oft genug und ehrlich gesagt hab ich da auch keine direkte Lösung. Allerdings benutze ich momentan die Lösung, die Bilder auf einem Internetspeicher (Eigene Website/Dropbox/etc) hochzuladen und das dann vom Programm in einen Absoluten Path auf dem PC zu speichern und wieder von dort zu benutzen.

LG Julian
 

JStein52

Top Contributor
Zwei einfache Fragen:

1.) sind deine Images inzwischen in der Jar-Datei ?
2.) wie lädtst du die Images (Code-Ausschnitt)
 

DaCrazyJavaExpert

Bekanntes Mitglied
Im Code musst du die, wenn sie in der Jar liegen, als Resource laden. Wie hast du das denn bisher umgesetzt
Naja ich habe einfach einen relativen Pfad benutzt(,ihn in ein ImageIcon gepack und das ImageIcon der entsprechenden Komponente zugewiesen). So in etwa der relative Pfad, den ich einem ImageIcon zuweise.
Java:
private ImageIcon irgendeinBild = new ImageIcon("images/GrundCookieClicker.png");
Und wie gesagt, in Eclipse wird alles mit Images angezeigt, als JAR exportiert allerdings nicht.
1.) sind deine Images inzwischen in der Jar-Datei ?
2.) wie lädtst du die Images (Code-Ausschnitt)
1) Weiß nicht. (Scheinbar nicht, oder ich lade die Bilder falsch)
2) Siehe oben.

Danke!
 

JStein52

Top Contributor
1.) Jar-Datei entzippen und nachsehen. wenn drin dann mit:
Code:
ImageIcon icon = new ImageIcon(getClass().getResource("images/demo.png"));
laden
 

DaCrazyJavaExpert

Bekanntes Mitglied
Also die Bilder sind in der JAR drin. Und so:
this.imageCookie = new ImageIcon(getClass().getResource("images/CookieClickerCookie.png"));
kommt eine Exception:
java.lang.NullPointerException
at javax.swing.ImageIcon.<init>(Unknown Source)
at de.m_ver.cookieclicker.gui.CookieClickerGUI.initialComponents(CookieClickerGUI.java:98)
at de.m_ver.cookieclicker.gui.CookieClickerGUI.<init>(CookieClickerGUI.java:88)
at de.m_ver.cookieclicker.main.Main$1.run(Main.java:15)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
 

Thallius

Top Contributor
Dann solltest du es mal richtig probieren:

Code:
        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
        InputStream input = classLoader.getResourceAsStream("images/image.png"); 
        try 
        {
           image = ImageIO.read(input);
        } 
        catch (IOException e) 
        {
            e.printStackTrace();
        }
 

JStein52

Top Contributor
Ich vermute dass der images - Ordner an der falschen Stelle ist. Das was du da zeigst ist ja die Struktur in Eclipse. Gibt als Pfad doch mal "../images/datei.png" an ob er sie dann findet

Ich kenne mich leider mit Eclipse nicht so gut aus, in Netbeans ist das einfacher. Aber relevant ist halt die Jar-Datei die rauskommt ... und die sieht man bei dir nicht :oops::oops:
 

DaCrazyJavaExpert

Bekanntes Mitglied
Ich vermute dass der images - Ordner an der falschen Stelle ist. Das was du da zeigst ist ja die Struktur in Eclipse. Gibt als Pfad doch mal "../images/datei.png" an ob er sie dann findet

Ich kenne mich leider mit Eclipse nicht so gut aus, in Netbeans ist das einfacher. Aber relevant ist halt die Jar-Datei die rauskommt ... und die sieht man bei dir nicht :oops::oops:
Der gleiche Fehler... Soll ichs vielleicht den images Ordner woandershin verlegen, oder die Bilder?
 

JStein52

Top Contributor
Ich kann dir nur sagen wie es bei mir in NetBeans ist. Da liegt der images-Ordner parallel zu der Java-Datei aus der ich dir den Ausschnitt oben gezeigt habe. In Eclipse ist das vermutlich innerhalb des src-Ordners ... bzw. wenn du packages verwendest in dem package-Ordner

Edit. bevor wir noch lange rumstochern schreib doch mal auf wie deine Jar-Datei aussieht ...
 

Meniskusschaden

Top Contributor
Ich habe eben mal folgendes in Eclipse probiert:
Java:
package snippets.ressource;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
public class Main {
  
   public Main() {
       ImageIcon icon = new ImageIcon(getClass().getResource("/icon.png"));
       System.out.println(icon);
       try {
           icon = new ImageIcon(ImageIO.read(getClass().getResourceAsStream("/icon.png")));
           System.out.println(icon);
       } catch (IOException e) {
           e.printStackTrace();
       }
   }
   public static void main(String[] args) {
       new Main();
       ImageIcon icon = new ImageIcon(Main.class.getResource("/icon.png"));
       System.out.println(icon);
   }
}
Alle drei Varianten haben aus der Eclipse-IDE heraus und auch als exportiertes jar-File funktioniert.

Im Anhang sind noch Screenshots der Struktur im Project-Explorer incl. bin-Verzeichnis und der jar-File.
 

Anhänge

  • ProjectExplorer.png
    ProjectExplorer.png
    18,9 KB · Aufrufe: 52
  • Jar.png
    Jar.png
    14,3 KB · Aufrufe: 50

JStein52

Top Contributor
Ja, so passt es .... Ignoriert eclipse den Ordner icons in dem du die Bilddatei abgelegt hast denn einfach so oder hast du ihm das irgendwie gesagt ?
 

mrBrown

Super-Moderator
Mitarbeiter
mit class bezieht es sich auf das aktuelle Package.
mit Classloader auf root, gleiches auch mit class und Pfad beginnend mit „/„.

Ansonsten sind beide Varianten identisch.
Relevant wäre nur noch, wie die jar aussieht.
 

Meniskusschaden

Top Contributor
Ignoriert eclipse den Ordner icons in dem du die Bilddatei abgelegt hast denn einfach so oder hast du ihm das irgendwie gesagt ?
Ja, den Ordner lässt Eclipse weg, und nein, ich habe da nichts eingestellt. Aber ich habe ihn nicht als "normalen" Ordner erstellt, sondern als Source-Ordner. Wenn man zwei Source-Ordner erstellen würde, die gleichnamige Dateien enthalten, würde es also ein Problem geben.
 

DaCrazyJavaExpert

Bekanntes Mitglied
Das versuche ich schon seit gestern aus ihm rauszukitzeln. Aber er ist da sehr verschwiegen
Ok dann lüfte ich das Geheimnis. Ich versteh allerdings selber nicht was mir das Programm da anzeigt :/.Ich seh nur, dass die Bilder die sind:
Bsp3.PNG Also das kommt, wenn ich die JAR entpacke.
kein Posting durchgerutscht ist
Was meinst du damit?

Zwei Bilder funktionieren übrigens mittlerweile mit this.imageCookie = new ImageIcon(getClass().getResource("/CookieClickerCookie.png"));

Allerdings werden die Bilder, die ich einer Klasse, welche von JPanel erbt übergeben nicht angezeigt. Hier die Klasse die Von JPanel erbt:
Java:
public class JPanelOverlay extends JPanel {

    private BufferedImage gameBackground;
    private String image;
   
    public JPanelOverlay(String image) {
        this.image = image;
    }
   
    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);

        this.gameBackground = null;

        try {
            this.gameBackground = ImageIO.read(new File(image));
        } catch (IOException exc) {
            exc.printStackTrace();
        }
        g.drawImage(this.gameBackground, 0, 0, this);
    }
}
Und so verwende ich sie:
Java:
private JPanelOverlay panelOverlay;

this.panelOverlay = new JPanelOverlay("/GrundCookieClicker.png");//Das hier wird nicht angezeigt. Ist allerdings in der JAR mit drin.
Danke!
 

DaCrazyJavaExpert

Bekanntes Mitglied
Vergleiche mal mit deinem Code der funktioniert .....
Wenn ich es so mache:
Java:
this.panelOverlay = new JPanelOverlay(getClass().getResource("/GrundCookieClicker.png"));
Kommt die Fehlermeldung:
The constructor JPanelOverlay(URL) is undefined
Und dann noch 2 quick fixes, welche beide darauf hinauslaufenen, dass ich im Kontruktor Den Typ von image zu URL ändere.
 

JStein52

Top Contributor

DaCrazyJavaExpert

Bekanntes Mitglied
Aso stimmt ich hab versucht gehabt dieses getClass().getResourceAsStream(image) irgendwie einzubauen, hab aber nicht gefunden wo :eek:. Danke.

EDIT: Leider wird immernoch der gleiche Fehler angezeigt.
Also der Compiler verlangt ein URL. Das andere hat aber doch auch so geklappt. :eek: :(
 

Meniskusschaden

Top Contributor
Hm, bist du sicher, dass Code und Fehlermeldung wirklich zusammen gehören? Wenn ein String übergeben wird, kann sich der Compiler eigentlich nicht beklagen, dass es keinen Konstruktor gibt, der eine URL erwartet.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Images aus einem Array ausgeben Java Basics - Anfänger-Themen 3
J Wie kann ich Images per Tastendruck anzeigen/einfügen? Java Basics - Anfänger-Themen 3
Y resize von images Java Basics - Anfänger-Themen 1
Z Zwei Images auf einem JFrame - Aber nur eins wird angezeigt! Java Basics - Anfänger-Themen 5
R Images verschwinden? Java Basics - Anfänger-Themen 3
J Hoher Speicherverbrauch beim Zeichnen von Images aus einer ArrayList Java Basics - Anfänger-Themen 10
T Erste Schritte Speicher läuft voll, Diashow, Images Java Basics - Anfänger-Themen 7
Luk10 Images und Koordinaten Java Basics - Anfänger-Themen 4
E Probleme mit Images verschieben Java Basics - Anfänger-Themen 4
E java.lang.OutOfMemoryError beim Rotieren eines Images Java Basics - Anfänger-Themen 14
R Problem beim Laden eines Images Java Basics - Anfänger-Themen 7
O Images erstellen Java Basics - Anfänger-Themen 3
P Images auf JPANEL? Java Basics - Anfänger-Themen 21
B Durchsichtige Images werden beim kopieren schwarz Java Basics - Anfänger-Themen 21
M images löschen mit *.jpg ? Java Basics - Anfänger-Themen 4
I Buffered Images vergleichen Java Basics - Anfänger-Themen 3
P Images im Archiv .jar Java Basics - Anfänger-Themen 9
E Images bzw jpegs speichern Java Basics - Anfänger-Themen 5
P Transparente Images Java Basics - Anfänger-Themen 5
H Images in jar Java Basics - Anfänger-Themen 6
S ordnerinhalt lesen , images als "greifbare" elemen Java Basics - Anfänger-Themen 3
megachucky wo gibts icons, images und sound dateien zum download? Java Basics - Anfänger-Themen 2
M Bildgröße (in Byte) eines Images ermitteln Java Basics - Anfänger-Themen 2
H Hotspots in Images Java Basics - Anfänger-Themen 2
U Classpath Eclipse Native mitexportieren? Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben