Icons laden nicht in GUI

thor_norsk

Bekanntes Mitglied
Guten Abend, ich habe folgendes Problem: Meine Icons werden in meinem Editor nicht geladen.

/src/editor
/src/icons

Ich habe 2 verschiede Möglichkeiten ausprobiert. (Betriebssystem: Windows 10)

dateiNeu.setIcon(new ImageIcon("icons/new24.gif"));
dateiNeu.setIcon(new ImageIcon("/icons/new24.gif"));

Editor funktioniert, aber in der Symbolleiste sind die Icons nicht sichtbar.

Danke.
 

KonradN

Super-Moderator
Mitarbeiter
Der Konstruktor ImageIcon(String) wertet den String als Filenamen aus. Das würde nur funktionieren, wenn die Applikation aus dem src Ordner heraus gestartet würde und das dann das aktuelle Verzeichnis wäre und Du die erste Variante hättest.

Aber so Dateien nennen sich Ressourcen und sollten daher auch wie Ressourcen geladen werden:
dateiNeu.setIcon(new ImageIcon(getClass().getResource("/icons/new24.gif")));

Ressourcen werden vom Classpath geladen, und funktioniert daher auch, wenn Du die Applikation z.B. als jar oder Image weiter gibst.
 

Neumi5694

Top Contributor
Was man zusätzlich noch von Anfang an machen kann, ist resourcen NICHT im src Ordner abzuspeichern, sondern einen eigenen Resourcen-Ordner anzulegen.
Ob dieser dann als solcher beim Build in das Ausführungsverzeichnis kopiert wird oder in eine zusätzliche jar gepackt wird, ist egal. Aber so gewöhnt man sich von Anfang an, Source code und Grafiken gedanklich und praktisch zu trennen.
In meinen Projekten findet sich beispielsweise immer ein "src" Ordner und ein "resources" Ordner.
 

thor_norsk

Bekanntes Mitglied
Jetzt stehe vor nächstes Problem. Wenn ich mein Editor über Eclipse starte dann ist die Symbolleiste samt die Symbole sichtbar, allerdings bei der Erstellung eines ausführbaren JAR-Archivs, werden die Icons wieder nicht geladen!
 

KonradN

Super-Moderator
Mitarbeiter
Die Ordnerstruktur dürfte auch schlicht nicht passen. Du hast icons nicht innerhalb von src und vermutlich werden die nicht nicht in das JAR Archiv gepackt. Benenne das jar file in zip um und schau nach, was drin ist und was nicht.

Und wenn Du die Pfade so angepasst hast, dann ist auch die Frage, ob Du das Laden angepasst hast. Greifst Du weiter rein über einen Filenamen zu? Dann wird es nicht gehen. Du musst also zwingend über die Resource API zugreifen.
 

thor_norsk

Bekanntes Mitglied
So steht in den Skripten. Ich habe genau die Anweisungen befolgt, wie man mit Eclipse eine ausführbare JAR-Datei erstellt.
File --> Export --> Runnable JAR File und launch und destination festgelegt.
 

Anhänge

  • EditorJAR.png
    EditorJAR.png
    5 KB · Aufrufe: 0

thor_norsk

Bekanntes Mitglied
Hallo, Ich habe den Fehler gefunden, unter Windows ist anders als bei Linux, man muss Ressourcen angeben, jetzt habe ich verstanden.
Ich werde paar Projekte so testen. Melde mich nochmal. Danke
 

Neumi5694

Top Contributor
Ich habe bißchen ausprobiert und jetzt läuft wieder.
/Projekt-Ordner/src
/Projekt-Ordner/icons
Kann mir nicht vorstellen, dass man so zum Ziel kommt.
Es sollte - wenn schon - so sein, falls die Icons im fertigen Programm in einem Unterverzeichnis namens Icons liegen sollen.
/Projekt-Ordner/resources/icons

Im Buildscript wird dann der Inhalt des classes-Ordners (den man als Ziel für das Kompilieren gewählt hat) und der Inhalt des resources Ordners in die Jar gepackt. Damit schließt man von Anfang aus, dass der Inhalt des Source-Ordners in der Jar landet.

Vor knapp 25 Jahren hatte ich mal ein Java-Spiel gekauft, in dem in einem Unterordner sämtliche Sourcecodes lagen. Selbst 'Profis' machen da also Fehler :)
Mein Methode ist natürlich nicht die einzige Möglichkeit, ich hab's mir nur so angewöhnt, Sourcen vom Rest strikt getrennt zu halten. Der Build klappt aber sicher auch mit passenden Dateifiltern.
Was ich mir zum Tesen meines Codes auch angewöhnt hab: Das Spezifitzieren eines Runtime-Verzeichnisses, das verschieden vom Projektordner ist. Damit stelle ich sicher, dass ich keine Dateizugriffe verwende, wo Resourcenzugriffe notwendig wären (Dateien in einer Jar).

Unter Linux und Windows gibt's bei Java übrigens keinen Unterschied. Wenn du da einen siehst, dann machst du was falsch.
Entweder greift man auf eine physikalische Datei zu oder auf eine Resource, das ist in beiden Fällen das Gleiche.
Einen Unterschied gibt es allerdings: Windows kann ./meinPfad/Datei.jpg und .\meinPfad\Datei.jpg auswerten, während unter Linux nur die erste Version funktioniert. Resourcen werden in beiden Fällen aber gleich benannt, hier kommt nicht das Dateisystem zum Einsatz, sondern Javas Logik zum Auslesen von Zip-Dateien.
 

thor_norsk

Bekanntes Mitglied
Also wenn ich dich richtig verstanden habe, dann so müsste aussehen?

/Projekt-Ordner/resources/icons
/Projekt-Ordner/src

und in Eclipse : dateiNeu.setIcon(new ImageIcon("C:/Projekt-Ordner/resources/icons/new24.gif"));

Dann kann ich unter Eclipse --> Export --> Runnable JAR File

Als Export-destination-Ordner kann ich beliebige Ordner wählen oder ?
 

KonradN

Super-Moderator
Mitarbeiter
Sorry, aber das ist falsch und ignoriert alles bisher gesagte.

Wenn Du die jar Datei weiter gibst: Wie bekommt ein Ziel-Rechner die Datei C:/Projekt-Ordner/resources/icons/new24.gif?

Es sollte also klar sein, dass dies so nicht funktionieren kann!

Und in Eclipse liegen erst einmal alle Sourcen und Ressourcen in src. Wenn Du da auch Dateien in resources haben willst, dann musst Du das entsprechend im Eclipse Projekt als Sources Ordner hinzufügen.

Wichtig ist:
a) Die Dateien müssen mit im JAR File landen -> Das kannst Du jederzeit prüfen!
b) Du lädst die Ressourcen nicht als pure Dateien sondern als Ressourcen über den Classloader. Der Classloader enthält die ganze Logik, um Elemente aus z.B. einem JAR File zu laden. Daher wird der genutzt.

Das sind Dinge, die bereits in #3 genannt wurden. Wenn Du danach suchst, dann findest Du diesbezüglich unzählige Threads hier im Forum.
 

Neumi5694

Top Contributor
und in Eclipse : dateiNeu.setIcon(new ImageIcon("C:/Projekt-Ordner/resources/icons/new24.gif"));

Dann kann ich unter Eclipse --> Export --> Runnable JAR File

Nein, in Eclipse:
dateiNeu.setIcon(new ImageIcon(getClass().getResource("/icons/new24.gif"));

Der resources-Ordner muss im Projekt als Classpath angegeben sein, der kommt später in eine Jar, die Teil des Class-Paths ist.
Im Buildscript wird der Inhalt von resources in diese reinkopiert/gespeichert.
Die Datei kann auch in einem Verzeichnis relativ zu einem Verzeichnis in deinem classpath liegen, Jave findet sie auch dann. Falls du so vorgehen willst, dann wird der Inhalt von resources vom Script nicht in die Jar gepackt, sondern 1:1 in das Dist-Verzeichnis kopiert.
Der übliche Weg jedoch ist, solche Dateien in eine Jar zu packen.

ps: Ja, Verzeichnisse für den Build können beliebig geändert werden, aber die Vorgabe funktioniert, ich würde da nicht zu viel Zeit und Energie investieren.
Das hier ist eine Möglichkeit
myproject\src Sourcen
myproject\resources Icons usw
myproject\classes Kompilierte Klassen
myproject\dist Zielverzeichnis für den Build

Sourcen werden von src -> classes kompiliert, dann wird eine Jar erstellt mit den Dateien aus classes und resources, diese landet in dist. Gegebenenfalls landen dort dann auch noch libraries usw. Dieses Verzeichnis ist das, das auf einem anderen Rechner, bzw. im Installationsverzeichnis landen kann. Alles andere ist Teil deiner Entwicklung, darf aber nicht im Code angesprochen werden.
 
Zuletzt bearbeitet:

KonradN

Super-Moderator
Mitarbeiter
Hier evtl. auch der dezente Hinweis: Statt ein Projekt von einer IDE zu nutzen dessen Einstellungen dann über lauter Setting-Seiten in der UI verteilt sind und die im Forum kaum / schwer zu checken sind:
Schon einmal drüber nachgedacht, ein Build System wie Maven oder Gradle zu nutzen? Wenn Du ein Maven Projekt hast, dann kannst Du einfach die pom.xml einmal posten und Anpassungen können Dir sehr einfach genannt werden. Und auch alle weitergehenden Dinge wie Erstellung einer JAR Datei sind dann deutlich transparenter. Und auch die Frage nach den Abhängigkeiten (die bestimmt noch kommen wird bei Deinen Java EE / Jakarta EE Kursen) sind dann deutlich transparenter.

Und da auch ganz am Rande: Mit neueren Java Version ist es auch unüblich eine JAR Datei weiter zu geben sondern statt dessen wird ein Image weiter gegeben. Dazu dienen dann Tools des JDKs wie JLink und JPackage. (Wobei es bei Dir dann wohl eher um WAR / EAR Dateien gehen wird, wenn Du mit Glassfish arbeiten wirst.)
 

thor_norsk

Bekanntes Mitglied
Hallo, ich habe die Aufgabe so gelöst wie im dem Skript erläutert würde, aber ich werde jetzt mich darum kümmern, die Aufgabe zu lösen.
Ich habe festgestellt, wenn ich meine JAR-Datei in anderen Ordner verschiebe, dass die plötzlich die Icons fehlen.
Nach dem ich die JAR-Datei entpackt habe, habe ich die Ursache entdeckt, dass die icons fehlen, also Eclipse hat seine Arbeit nicht gemacht.
Wie auch immer ist die Beschreibung in den Skripten schlecht und nicht vollständig. Vor Allem passiert nicht jedem Ordner, ist irgendwie komisch.
Aber ihr habt ja oben Alles erläutert wie man es machen sollte, jetzt werde ich versuchen eure gedanken nach zu vollziehen.
Danke.
 

Neumi5694

Top Contributor
Naja, es sollen ja auch nicht alle Ordner in die Jar, das ist durchaus beabsichtigt. Sourcen und Projektinformationen haben in der Jar z.B. nichts zu suchen. Viel Erfolg.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Swing Laden eines Icons auf JButton liefert NullPointerException AWT, Swing, JavaFX & SWT 8
MiMa Fonts, Icons, Bilder in JavaFX Anwendung AWT, Swing, JavaFX & SWT 5
I Einbindung eines jpg/png/icons in eine GUI AWT, Swing, JavaFX & SWT 1
ProggersWorld JavaFX Icons im TreeView werden nicht angezeigt AWT, Swing, JavaFX & SWT 1
VPChief Icons in 2 Jlabels Director nebeneinander anzeigen AWT, Swing, JavaFX & SWT 26
F Icons neben Text in Listview setzen AWT, Swing, JavaFX & SWT 2
A Jtabbed ein Reiter mit zwei icons AWT, Swing, JavaFX & SWT 4
B SWT TreeViewer dynamische Anzeige von Icons AWT, Swing, JavaFX & SWT 3
B Link eines Icons dynamisch gestalten AWT, Swing, JavaFX & SWT 2
JavaInBrain Swing JButton: Zuordnen von Icons AWT, Swing, JavaFX & SWT 4
T SWT Drag&Drop: Eclipse FileTransfer mit Icons AWT, Swing, JavaFX & SWT 14
P Liste mit Icons und mehreren Spalten AWT, Swing, JavaFX & SWT 7
NR_EIGHT Swing JButton zeigt Icons nicht an AWT, Swing, JavaFX & SWT 3
B "Alte" Swing ICONs gesucht AWT, Swing, JavaFX & SWT 2
X Icons in einer Spalte darstellen AWT, Swing, JavaFX & SWT 6
S 2D-Grafik Icon in Image (System Icons) AWT, Swing, JavaFX & SWT 2
G Unterschiedliche Pfadangabe zu Icons zwischen JApplet und JWindow? AWT, Swing, JavaFX & SWT 2
B Standard Icons wo findet man diese? AWT, Swing, JavaFX & SWT 20
N Button soll die Größ eines Icons haben AWT, Swing, JavaFX & SWT 5
G Swing Icons von JLabel zur Laufzeit ändern AWT, Swing, JavaFX & SWT 3
sylo Position des Icons bei JMenuItem AWT, Swing, JavaFX & SWT 11
L Swing Bilder im Icons-Ordner AWT, Swing, JavaFX & SWT 4
T Swing Icons mit Transparentz... AWT, Swing, JavaFX & SWT 12
Dit_ Verschiedene Icons in einer JTable-Zelle AWT, Swing, JavaFX & SWT 2
L Wieso werden die Icons nicht dargestellt? AWT, Swing, JavaFX & SWT 2
M Icons in Jar AWT, Swing, JavaFX & SWT 3
M Mehrere Icons in einer JComponent AWT, Swing, JavaFX & SWT 5
T Icons in jar AWT, Swing, JavaFX & SWT 17
A JLabel, Icons und GridLayout AWT, Swing, JavaFX & SWT 3
S JTree rendern der Knoten [+] und [-], nicht der Node Icons AWT, Swing, JavaFX & SWT 2
G Icons verkleinern AWT, Swing, JavaFX & SWT 4
M icons für die java.swing components wie jbutton etc AWT, Swing, JavaFX & SWT 5
G Verhindern, das AbstractAction Text und Icons überschreibt? AWT, Swing, JavaFX & SWT 3
DeeDee0815 SWT-Buttons, Icons und die Win32-API AWT, Swing, JavaFX & SWT 3
T Standard Icons AWT, Swing, JavaFX & SWT 7
G Wo finde ich Icons zum runterladen AWT, Swing, JavaFX & SWT 3
S JTable mit Icons in DB speichern AWT, Swing, JavaFX & SWT 10
S Hochauflösende ICONS für Lebensmittel? AWT, Swing, JavaFX & SWT 7
J Icons ueber getRessource lesen AWT, Swing, JavaFX & SWT 5
S JButton auf verkleiner auf größe eines Icons AWT, Swing, JavaFX & SWT 5
A Icons von Kontextmenüeinträgen verschwinden (SWT) AWT, Swing, JavaFX & SWT 2
D Komponenten mit zusätzlichen Icons AWT, Swing, JavaFX & SWT 2
F 2 icons in jtabbedpane, links und rechts von label AWT, Swing, JavaFX & SWT 2
P JMenu / JMenuItem durch Rekursion Icons entfernen AWT, Swing, JavaFX & SWT 4
B PNG-Icons in Toolbar einbinden AWT, Swing, JavaFX & SWT 3
C Icons und Bilder in der JAR AWT, Swing, JavaFX & SWT 9
S Multiselektieren von Icons AWT, Swing, JavaFX & SWT 5
R JTree ohne visible Root aber mit Icons ? AWT, Swing, JavaFX & SWT 2
F Icons des JTrees austauschen AWT, Swing, JavaFX & SWT 2
G JTabel und Icons AWT, Swing, JavaFX & SWT 9
Q CloseAndMaxTabbedPane Icons werden nicht angezeigt AWT, Swing, JavaFX & SWT 4
M Java Datei Icons AWT, Swing, JavaFX & SWT 2
M Windows file icons in Java verwenden AWT, Swing, JavaFX & SWT 2
S JAR -> Icons werden nicht mehr angezeigt AWT, Swing, JavaFX & SWT 11
K icons sauber anzeigen (an hintergrund angepasst) AWT, Swing, JavaFX & SWT 4
Z Problem mit Icons in JTable AWT, Swing, JavaFX & SWT 3
R SWT: Icons im Table vor den Einträgen AWT, Swing, JavaFX & SWT 3
D Auf System-Icons wie die aus JOptionPane zugreifen? AWT, Swing, JavaFX & SWT 6
Hotkey Freie Icons für Anwendung mit Java Look&Feel AWT, Swing, JavaFX & SWT 4
S JTree // Icons AWT, Swing, JavaFX & SWT 2
S [JTree] Icons ohne DefaultTreeCellRenderer AWT, Swing, JavaFX & SWT 6
J Icons mit Text als Menü AWT, Swing, JavaFX & SWT 2
F SkinLF - GTK Icons werden nicht genutz - KDE schon - why? AWT, Swing, JavaFX & SWT 8
F JTree mit anderen Icons AWT, Swing, JavaFX & SWT 7
W Websites mit freien Icons AWT, Swing, JavaFX & SWT 4
G Warum gehen meine Icons/Images nicht weg? AWT, Swing, JavaFX & SWT 2
I Icons in JLists AWT, Swing, JavaFX & SWT 2
G Icons in CTabFolder AWT, Swing, JavaFX & SWT 3
L Buttons und Icons AWT, Swing, JavaFX & SWT 2
W JRadioButtonMenuItem (Icons) AWT, Swing, JavaFX & SWT 13
Z Problemen mit Icons? AWT, Swing, JavaFX & SWT 5
G Overlay-Icons über JTextField AWT, Swing, JavaFX & SWT 5
A Icons und Bilder bei EXE-Datei nicht da AWT, Swing, JavaFX & SWT 5
S JTree Datei Icons ? AWT, Swing, JavaFX & SWT 28
M icons im menubar ? AWT, Swing, JavaFX & SWT 5
G standard system icons AWT, Swing, JavaFX & SWT 1
Jose05 Aus einer normalen Java Klasse eine FXML-Klasse laden AWT, Swing, JavaFX & SWT 12
G JavaFX Wert aus DB lesen, wenn erfolgreich automatisch eine fxml laden, möglich? AWT, Swing, JavaFX & SWT 2
K JavaFX Bildergalerie aus Image Ordner laden AWT, Swing, JavaFX & SWT 3
L JavaFX .fxml laden klappt nicht AWT, Swing, JavaFX & SWT 16
DeBoiJoshua 2D-Grafik Gif Animation will nicht laden AWT, Swing, JavaFX & SWT 1
R Grafik per JButton laden und austauschen lassen AWT, Swing, JavaFX & SWT 14
H Images laden nicht AWT, Swing, JavaFX & SWT 14
B Swing Sudoku: Laden / Speichern von Zahlen aus/in mehrere JTextFields aus/in eine(r) Textdatei AWT, Swing, JavaFX & SWT 9
A Swing Datei lässt sich zwar speichern, aber nicht laden (Inhalt im JTextField anzeigen) AWT, Swing, JavaFX & SWT 18
C Swing F5 Taste neu laden auf ganzen Frame AWT, Swing, JavaFX & SWT 9
N Swing Image aus Web laden und in Icon umwandeln AWT, Swing, JavaFX & SWT 4
J Bild von anderer Klasse will nicht laden AWT, Swing, JavaFX & SWT 1
F JavaFX PNG aus einem resource Ordner laden AWT, Swing, JavaFX & SWT 8
L JavaFX LoadException beim Laden von JavaFX Anwendung AWT, Swing, JavaFX & SWT 6
F JButtons neu laden AWT, Swing, JavaFX & SWT 4
M AWT Laden von Sprites AWT, Swing, JavaFX & SWT 3
Thallius JTable dynamisch laden? AWT, Swing, JavaFX & SWT 2
@SupressWarnings() JavaFX Bilder in executable jar laden AWT, Swing, JavaFX & SWT 5
S JavaFX Laden des Inhalts AWT, Swing, JavaFX & SWT 1
L JavaFX Verzögerung beim Laden von Daten AWT, Swing, JavaFX & SWT 6
I Scene Builder kann .fxml nicht mehr laden AWT, Swing, JavaFX & SWT 3
S NullPointer Exception beim Laden von Bildern AWT, Swing, JavaFX & SWT 11
X Java Fxml laden AWT, Swing, JavaFX & SWT 4
G Properties automatisch laden AWT, Swing, JavaFX & SWT 10

Ähnliche Java Themen

Neue Themen


Oben