IDEA IntelliJ Bilder in der fertigen Application

Galliad

Mitglied
Ich stecke aktuell in der Entwicklung eines kleinen Behelfsprogramms. Das Programm generiert ein paar kleine Werte, die zum Teil in Bildern ausgedrückt werden. Ich habe wirklich viele Bilder drin, über 70 Stück. Bisher habe ich Code im folgenden Format verwendet um die Bilder zu integrieren:

[CODE lang="java" title="Image Icon"]climateImageLabel.setIcon(new ImageIcon("D:\\Dropbox\\Codingprojekte\\Wildnistool\\src\\DSA_Wildnistool\\Pictures\\KEIN BILD.jpg"));[/CODE]

Den Pfad habe ich direkt von Inteliji aus dem Dateimanager links heraus kopiert. Ich habe dabei zur Sicherheit immer den Absolute Path, der von C:\\ ausgeht verwendet.
Nun wurde ich gebeten, eine vorab Version an einen Bekannten zu schicken. Ich habe dazu ein paar Tutorials angeschaut und dann in der Projektstruktur, das Projekt filehinzugefügt .
Bilderladen 1.PNG
Bilderladen 2.PNG

Hier seht ihr meine Projektstruktur.
Ihr seht außerdem, dass der Pfad immer "null" ist, was ich nicht ganz nachvollziehen kann.
Ich habe es mit folgenden Codes versucht:
[CODE lang="java" title="Meine Versuche:"]//1
climateImageLabel.setIcon(new ImageIcon(getClass().getResource("src/DSA_Wildnistool/Pictures/KEIN BILD.jpg")));

//2
climateImageLabel.setIcon(new ImageIcon(ImageIO.read("src/DSA_Wildnistool/Pictures/KEIN BILD.jpg")));

//3
climateImageLabel.setIcon(new ImageIcon(getClass().getResourceAsStream("src/DSA_Wildnistool/Pictures/KEIN BILD.jpg")));

//4
climateImageLabel.setIcon(new ImageIcon(new File("src/DSA_Wildnistool/Pictures/KEIN BILD.jpg")));[/CODE]

Das sind zumindest die, die mir einfallen, ich habe gestern die halbe Nacht lang versucht das Problem zu lösen. Leider führt alles dazu, dass der Pfad entweder null ist, oder wenn er es nicht ist, dass in der fertig gerenderten Application die Bilder fehlen.
Kann mir bitte jemand dabei helfen meine Applikation aufzusetzen? Ich weis nicht mal mehr ob das Problem der Code, die Projektstruktur oder Inteliji selbst ist.
 

mihe7

Top Contributor
climateImageLabel.setIcon(new ImageIcon(getClass().getResource("src/DSA_Wildnistool/Pictures/KEIN BILD.jpg")));
Das wäre schon der richtige Weg, den ClassLoader zu verwenden. Allerdings lädt der ClassLoader natürlich aus dem ClassPath und da kommt src nicht vor. Schau einfach mal in das jar-File (das ist einfach ein ZIP-File), wo dort die Bilder liegen und den Pfad gibst Du dann an (sollte /DSA_Wildnistool/... sein).
 

Galliad

Mitglied
Das wäre schon der richtige Weg, den ClassLoader zu verwenden. Allerdings lädt der ClassLoader natürlich aus dem ClassPath und da kommt src nicht vor. Schau einfach mal in das jar-File (das ist einfach ein ZIP-File), wo dort die Bilder liegen und den Pfad gibst Du dann an (sollte /DSA_Wildnistool/... sein).
hey. Ich habe den ClassLoader auch schon versucht, der hat auch nicht geklappt.
Aber ich weiß nicht genau, was du mit ClassPath meinst, oder welches jar-File. Ich habe die Bilder raw im Projektordner liegen.
 

mihe7

Top Contributor
Probier einfach mal:

Java:
climateImageLabel.setIcon(new ImageIcon(getClass().getResource("/DSA_Wildnistool/Pictures/KEIN BILD.jpg")));

Erklärung reiche ich nach.
 

Galliad

Mitglied
Das Problem hört leider bei dem einen Bild nicht auf. Ich habe ein Reihe von Bildern, die ich über einen Array organisere.
Ich habe eine Klasse angelegt, namens climate, darin gibt es den Array climateSelection und den Array climatePictures.
Es existiert eine JComboBox. Der Code ist so angelegt, dass immer, wenn die Auswahl der Box geändert wird, folgender Code ausgeführt wird.


Java:
selectedClimate = new climate();
            String moodpic = selectedClimate.climatePictures[climateSelection.getSelectedIndex()];
            climateImageLabel.setIcon(new ImageIcon(getClass().getResource(moodpic)));

Der Array ist ein Array mit Strings, also ein String[]. Der Code, den du mir gegeben hast, funktioniert perfekt. Sogar im fertigen Build. Aber die Bilder aus dem Array nicht. Auch wenn ich den URL da genau hineinkopiere.
 
K

kneitzel

Gast
Was ist denn dann für ein Wert in moodpic und welches Bild soll geladen werden?

Wenn der Pfad und der Name richtig sind, dann wird das Bild auch geladen.
 

mihe7

Top Contributor
Erstmal zur Erklärung: die JVM lädt Klassen und Ressourcen aus dem Class-Path mit Hilfe eines ClassLoaders. Der Class-Path wird beim Start der Anwendung angegeben und enthält Bibliotheken, URLs, Verzeichnisse, die für den ClassLoader als Ausgangspunkt der Suche gelten.

Die IDE verwenden ein Build-System (entweder ein eigenes, internes oder ein externes wie Ant, Maven oder Gradle). Beim Build werden Klassen und Ressourcen in einen definierten Verzeichnisbaum gespeichert (einen Hinweis darauf liefert im Bilderladen 2.PNG das Feld Output Directory). Dieser Verzeichnisbaum wird bei der Ausführung von der IDE als Teil des Class-Path angegeben. Geht der Build einen Schritt weiter, wird ein Jar-File erzeugt. Im Wesentlichen wird dabei der Verzeichnisbaum gezippt und dem Zip ein Manifest hinzufügt, das ggf. Angaben zum Class-Path sowie zur ausfzuführenden Klasse etc. enthält. So ist es dann möglich, das Jar weiterzugeben, das bereits die Bilder enthält.

Und nachdem @kneitzel schon geschrieben hat, kann ich mir die Fragen sparen :) Außerdem kennt sich @kneitzel bestens in IntelliJ aus und kann Dir zu den Einstellungen mehr erzählen, weil ich in der Regel mit NetBeans unterwegs bin.
 

Galliad

Mitglied
@kneitzel
Nein du hast recht. Das war es wirklich. Es scheint jetzt alles zu funktionieren.
Ich hoffe trotzdem noch auf eine Erklärung wieso es funktioniert.
Habt beide tausend dank
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
MiMa Ressources Bilder werden einfach nicht erkannt? IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 7
A Bilder In ein GUI erstellen IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 1
M IDEA IntelliJ Jar Datei Bilder IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 4
J Eclipse Fertiges Programm enthält keine Bilder mehr IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 6
E Eclipse Bilder werden nicht angezeigt IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 10
R Bilder in einem Runnable Jar Archiv IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 4
N NetBeans Bilder ins Projekt importieren IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 2
G Eclipse: Bilder werden in .jar nicht mehr angezeigt IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 7
R Eclipse: wie Bilder zum Projekt hinzufügen IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 13
G Bilder in jar-Datei IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 3
A Bilder in NetBeans 5.0 BlueJ Edition einfügen IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 4
A verwendete bilder auch in jar ausführen? IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 3
krgewb Kein Sprung (per STRG + Mausklick) von application.properties möglich IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 2
krgewb IntelliJ - Zu application.properties springen IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 1
N Eclipse aus Java-Application JavaFX machenModule javafx.controls not found IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 7
T NetBeans "Gradle Project" in "Web Application" nutzen IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 5
robbin IDEA IntelliJ Tutorial Youtube Networking Chat Application IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 0
M Java als Standalone application ausführen IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 3
D [NetBeans] NetBeans Plattform Application Fragen IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 0
R Eclipse Run Java Application und JMF IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 8
K NetBeans Task selber schreiben und in Swing Application Framework einbinden IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 2
G Netbeans 6.1 und Java Dektop Application mit integrierter DB IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 2
M MDI Application mit einen klein Dialog für Kind IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 28
S Änderung der Application Klasse von 3.2 auf 3.3 IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 12
B Eclipse / Build a standalone SWT application IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 2

Ähnliche Java Themen


Oben