Nach dem kompilieren werden Bilder nicht mehr gefunden

B

Bomati

Mitglied
Hey,

ich versuche mein Problem so leicht wie möglich zu beschreiben:

1. In IntellJ kann ich mein Spiel ohne Probleme mit allen Bildern und Funktionen ausführen.
2. Nach dem Kompelieren zu einer Jar findet er meine Bilder aus der Map nicht mehr. (Siehe Bild)
3. Klassen wo ich die Bilder einfach rein geschrieben habe funktionieren einwandfrei nach dem Kompelieren.

Code:

Image background = (new ImageIcon(this.getClass().getResource("/Account.png"))).getImage();

funktioniert ohne Probleme.

----------------------------------

Map:

public class MenuIcons extends IconProvider {

public static final int ITEM_SHOP_BUTTON = 1;
public static final int LEVEL_BUTTON = 2;
public static final int MAIN_MENU = 3;
public static final int BACKGROUND_BUTTON = 4;
public static final int LEVEL_BACKGROUND = 5;



private static final Map<Integer, ImageIcon> ICON_MAP;
static {
Map<Integer, ImageIcon> tempMap = new HashMap<>();

tempMap.put(ITEM_SHOP_BUTTON, getImageFromResources("/ItemshopBtn.png"));
tempMap.put(LEVEL_BUTTON, getImageFromResources("/LevelBtn.png"));
tempMap.put(MAIN_MENU, getImageFromResources("/MainMenu.png"));
tempMap.put(BACKGROUND_BUTTON, getImageFromResources("/NothingField.png"));
tempMap.put(LEVEL_BACKGROUND, getImageFromResources("/LevelLayout.png"));


ICON_MAP = Collections.unmodifiableMap(tempMap);
}

public static ImageIcon getIcon(int iconId) {
return ICON_MAP.get(iconId);
}
}

-------------------------------------------------------------

IconProvider:

public abstract class IconProvider {

protected static ImageIcon getImageFromResources(String path) {
return new ImageIcon(IconProvider.class.getResource(path));
}
}

--------------------------------------------------------------

In der Klasse:

this.getContentPane().add(GuiFactory.createBtn(new Rectangle(80, 135, 300, 50), MenuIcons.getIcon(4), this.ActionListenerPlayer1()));


funktioniert alles in IntellJ perfekt! Wo liegt mein Fehler, dass es in der Jar nicht mehr funktioniert?
Console.PNG
 
kneitzel

kneitzel

Top Contributor
Hast Du mal in die jar Datei geschaut: Sind da die Bilder enthalten? Evtl. sind die Bilder nicht mit in die JAR Datei kopiert worden?

Und wo im jar File sind die Bilder? Direkt im root?
 
B

Bomati

Mitglied
Sind enthalten und liegen direkt beim öffnen drin. Bzw. liegen sie dort eventuell verkehrt? ( In Intellj liegen sie in resources / root )
 
kneitzel

kneitzel

Top Contributor
Du entwickelst unter Windows? Evtl. Gross/Kleinschreibung? Windows Dateisystem ist nicht Case Sensitive aber im Jar ist es evtl. Case Sensitive ....

Ist nur eine Vermutung denn ich bin sonst immer unter Unix unterwegs mit Case sensitive Filesystemen ... da stellt sich so eine Problematik nicht erst.
 
B

Bomati

Mitglied
Ja unter Windows 10. Habe alle Dateien am Anfang groß geschrieben... ( Im Code auch )

Meinst du wirklich das es daran liegen könnte? Wäre sehr viel Aufwand alles klein zu schreiben bei ca. 100 Bildern.
 
kneitzel

kneitzel

Top Contributor
Das ist ok. So Du diese gleich geschrieben hast, ist das nicht das Problem. Also z.B.:
/ItemshopBtn.png hast du im Code geschrieben. Das sollte also dann auch genau so im Jar-File drin sein und nicht als ItemShopBtn.png oder ItemshopBtn.PNG oder so ... (Also einmal noch das S gross und dann beim zweiten die Endung gross ... so als Beispiel ...)

Evtl. einmal Deine Methode ergänzen, so dass da noch die Resource, welche nicht geladen werden konnte, gelogt wird. (Wobei Du das ja auch aus dem StackTrace entnehmen kannst so du das immer so im Code angegeben hast.)

Und das sollte dann soweit richtig sein. Bei "/name" wird "name" an den ClassLoader gegeben mit getSystemResource und das sucht dann nach "name" im classpath. Das jar File selbst ist ja auch im classpath, denn sonst wären die Klassen daraus ja auch nicht zu finden ...

So ist zumindest mein Verständnis der Dokumentation.
 
B

Bomati

Mitglied
Bin grade alle Bilder nochmal durchgegangen. Alle richtig mit .png und richtiger Gross/Kleinschreibung. (Bin den Code auch abgegangen richtiger Pfad überall...)

Mir gehen so langsam die Ideen aus... So wie du es dokumentiert hast funktioniert es auch einwandfrei in Intellj.
 
X

X5-599

Top Contributor
Um sicher zu gehen, dass ich's richtig verstanden habe. Dieses Image background = (new ImageIcon(this.getClass().getResource("/Account.png"))).getImage(); funktioniert aber? Auch wenn als jar gebaut?
 
kneitzel

kneitzel

Top Contributor
Hast Du die Lokation der NPE auch genau lokalisiert?
Was mich stört ist, dass dieses blöde "40 more" zu früh kommt. Da hätte ich gerne noch etwas mehr gesehen ....
MenuIcons.java Zeile 25 - Kannst Du da mal den Konstruktor zeigen mit Zeile 25 markiert? Nicht dass wir hier evtl. doch noch an einer falschen Stelle etwas suchen ...
 
B

Bomati

Mitglied
X5-599 richtig.

Hab es endlich rausgefunden...

public abstract class IconProvider {

protected static ImageIcon getImageFromResources(String path) {
try {
return new ImageIcon(ImageIO.read(Thread.currentThread().getContextClassLoader().getResourceAsStream(path)));
} catch (Exception ex) {
System.out.println(path);
}

return null;
}
}

Warum das andere nicht gegangen ist Frag mich nicht... bin einfach grade glücklich^^

Vielen Dank trotzdem für eure Hilfe!
 
kneitzel

kneitzel

Top Contributor
Also nach meinem Verständnis ist der Hauptunterschied bei der Ressourcen-Findung nun, dass beim ClassLoader keine relativen Pfade gegeben werden können. Eine mögliche Erklärung, die mir hier gerade einfallen würde, wäre:
Hast Du evtl. bei einem Aufruf den "/" vergessen? Beim Aufruf auf der Klasse hätte er dann den Namespace der Klasse als relativen Startpunkt genommen. Beim Aufruf über den Classloader ist der relative Pfad nicht gegeben und er startet immer im "root" (wenn man das so bezeichnen möchte).

Aber super, dass Du eine Lösung gefunden hast!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Arbeitsspeicher nach kompilieren immer voller Java Basics - Anfänger-Themen 6
L Öffnen des Programms nach kompilieren nicht möglich Java Basics - Anfänger-Themen 3
M Keine Ausgabe nach erfolgreichem Kompilieren (javac, ubuntu) Java Basics - Anfänger-Themen 10
P Wav spielt nach dem Kompilieren nicht mehr. Java Basics - Anfänger-Themen 2
A Problem nach dem kompilieren. Java Basics - Anfänger-Themen 6
B Nach eingefügtem Code erkennt Compiler keine Instanzvar und meldet SyntaxError Java Basics - Anfänger-Themen 2
newcomerJava Nach doppelter Zahl eine Ausgabe Java Basics - Anfänger-Themen 10
M Anzahl Schleifendurchgänge nach x Sekunden anzeigen Java Basics - Anfänger-Themen 2
C Lotto 3, 4, 5, 6 Richtige nach x Ziehungen ermittelt.. Java Basics - Anfänger-Themen 7
G Primzahlen von Rekursiv nach Iterativ Java Basics - Anfänger-Themen 6
F JMenuItem Kann nicht nach einem String benannt werden... Java Basics - Anfänger-Themen 11
R JDK installieren Durcheinander nach installation von SE 14.02 Java Basics - Anfänger-Themen 6
P Sortieren von Listen nach Attributen Java Basics - Anfänger-Themen 3
B DateTimeFormatter nach LocalDateTime, wenn dd.MM.yyyy oder dd.MM.yyyy mm:hh Java Basics - Anfänger-Themen 5
1 main-Methode erweitern, Nachfrage nach wiedeholung Java Basics - Anfänger-Themen 2
G unklares Verhalten nach Instanzierung neuer Klasse Java Basics - Anfänger-Themen 3
S Wohin kommt das „abstract“? Vor oder nach „public“/ „private“ /... Java Basics - Anfänger-Themen 3
S Datenbank Befehl nach Login Java Basics - Anfänger-Themen 5
N Operatoren Schreibtischtest der Reihen-Suche nach Aufschluss in die Basics Java Basics - Anfänger-Themen 1
B Umstieg von C# nach Java Java Basics - Anfänger-Themen 18
Ellachen55 Wie nach häufigste Werte im Array suchen? Java Basics - Anfänger-Themen 2
M Untersuchen ob ein Graph nach entfernen einer Kante immer noch zusammenhängend ist Java Basics - Anfänger-Themen 70
N Wörter und Zahlen nach speziellen Wörtern ausgeben Java Basics - Anfänger-Themen 11
M Werte ändern sich nicht mehr nach Reset Java Basics - Anfänger-Themen 14
X Nach einem Bruch testen ob es eine ganze Zahl ist Java Basics - Anfänger-Themen 6
B String nach erstem Leerzeichen trennen Java Basics - Anfänger-Themen 7
N Speichern von Werten in Variablen nach Schließen des Programms Java Basics - Anfänger-Themen 3
G String wird nach Einlesen aus Datei nicht erkannt Java Basics - Anfänger-Themen 3
UnknownInnocent Best Practice Algorithmus nach jedem Schritt zum Visualisieren pausieren Java Basics - Anfänger-Themen 3
O zwei Arrays nach Werten durchsuchen und zusammenfügen Java Basics - Anfänger-Themen 3
M Double Wert nach n abschneiden ohne zu runden Java Basics - Anfänger-Themen 1
C Erste Schritte Bilder nach Export anzeigen Java Basics - Anfänger-Themen 0
F Input/Output Files von A nach B kopieren Java Basics - Anfänger-Themen 11
B InputStream (PDF) nach Image (PNG / JPG) konvertieren? Java Basics - Anfänger-Themen 2
O ADT Graph nach größe Abfragen Java Basics - Anfänger-Themen 42
O compareTo nach mehreren Kriterien Java Basics - Anfänger-Themen 13
R Benutzereingaben als Array abspeichern nach Programmstart Java Basics - Anfänger-Themen 5
S Pane nach speziellen Child Objekten durchsuchen Java Basics - Anfänger-Themen 3
V Neue Ausgabe von toString nach Methodenaufruf Java Basics - Anfänger-Themen 9
L Arrayliste von hinten nach vorne ausgeben Java Basics - Anfänger-Themen 10
F Array nach Objektattribut durchsuchen Java Basics - Anfänger-Themen 6
M Rationale Zahl erkennen - Kurze Frage zum Restwert nach Division Java Basics - Anfänger-Themen 3
O String von vorne nach hinten an einem Zeichen Java Basics - Anfänger-Themen 10
Hanschyo Quicksort sortiert von groß nach klein Java Basics - Anfänger-Themen 3
S suche nach varible POSITION ... fuer das pixel-maennchen Java Basics - Anfänger-Themen 4
A Einträge aus Tupeln nach Regeln in Liste speichern Java Basics - Anfänger-Themen 8
B String nach HTML formatieren Java Basics - Anfänger-Themen 9
Zrebna Compiler-Fehler Java-Compiler wird nach 'javac' keyword-Eingabe nicht gestartet (Erste Übung) Java Basics - Anfänger-Themen 18
UnknownInnocent Klassen JPanel nach Ablauf der Spielzeit neuladen Java Basics - Anfänger-Themen 2
B Umbruch nach bestimmten Wort Java Basics - Anfänger-Themen 5
E Arrays nach best Muster füllen Java Basics - Anfänger-Themen 4
K String nach bestimmtem Muster parsen Java Basics - Anfänger-Themen 3
S Amazon Produktbeschreibung auslesen und nach Keywords suchen Java Basics - Anfänger-Themen 2
M Scanner-Eingabe nach gewissem Zeitraum überprüfen Java Basics - Anfänger-Themen 2
J variablePathPart ändern nach dem Ordner abgearbeitet worden ist Java Basics - Anfänger-Themen 1
B Wie kann ich die Buchstaben sortieren nach der Höhe der Zahlen Java Basics - Anfänger-Themen 14
J GUI wird direkt nach dem erstellen weiß übermalt Java Basics - Anfänger-Themen 3
L Programm zur Codieren nach Rotx Java Basics - Anfänger-Themen 1
S Nach dem Herüberschieben eines Arrays zwischen 2 Frames öffnet sich das Frame nicht mehr Java Basics - Anfänger-Themen 12
A ArrayList - size() nur nach bestimmtem index anzeigen lassen Java Basics - Anfänger-Themen 13
M Array nach String durchsuchen und zurückgeben Java Basics - Anfänger-Themen 16
W Wie lasse ich meine Ausgabe nach dem Lesen verschwinden ? Java Basics - Anfänger-Themen 1
F Liste nach einer Variablen sortieren Java Basics - Anfänger-Themen 6
S String trennen nach beliebigen Zeichen Java Basics - Anfänger-Themen 3
D Ich suche nach einer Möglickeit den Webseiten Inhalt per Java zu analysieren Automatisch Java Basics - Anfänger-Themen 3
B String: suche nach Wörter und in List<String> speichern Java Basics - Anfänger-Themen 3
O Array nach gleichen Zahlen prüfen und ausgeben Java Basics - Anfänger-Themen 6
K Matrixen berechnen nach Worker Master Paradigma mit Threads Java Basics - Anfänger-Themen 4
K Schlüsselworte Nach Java update findet mdb Datei nicht Java Basics - Anfänger-Themen 6
G nach 9 - stelliger Nummer suchen Java Basics - Anfänger-Themen 7
S Wie verwende ich ne aus einer Schleife nach der Schleife? Java Basics - Anfänger-Themen 9
M BufferedReader neue Zeile nach Knopfdruck Java Basics - Anfänger-Themen 9
E JAvaFX: Verschiedene Panels nach Klick auf Node des TreeView anzeigen Java Basics - Anfänger-Themen 0
D Liste nach 2 gleichen Einträgen suchen Java Basics - Anfänger-Themen 4
J Input/Output Den zweiten Output erst nach Eingabe ausgeben Java Basics - Anfänger-Themen 4
L (Integer) Liste nach aufsteigender Summe der Ziffern sortieren (mit Bedingung) Java Basics - Anfänger-Themen 8
S Dialogfeld nach 5 Sek automatisch öffnen Java Basics - Anfänger-Themen 15
F Alle Objekte einer Klasse nach Eigenschaft durchsuchen Java Basics - Anfänger-Themen 8
S OOP Button erst nach 2x klicken deaktivieren Java Basics - Anfänger-Themen 4
C Compiler-Fehler Wird eine if Bedingung nach einer for-Schleife nach jeder Iteration überprüft? Java Basics - Anfänger-Themen 1
F Koordinaten nach 360° auf 0° setzen Java Basics - Anfänger-Themen 2
N Operatoren Suchen nach einer bestimmten Eingabe (durch Scanner) Java Basics - Anfänger-Themen 7
S Sound stoppen und nach Pause wieder abspielen Java Basics - Anfänger-Themen 6
G String nach Contains/Regex Java Basics - Anfänger-Themen 2
J fehler nach windows update Java Basics - Anfänger-Themen 44
F Wort nach String ausgeben Java Basics - Anfänger-Themen 5
J doppelname nach schlüsselwort extends Java Basics - Anfänger-Themen 4
M Array nach Zehnen durchsuchen. Java Basics - Anfänger-Themen 25
F Interface Nach mehreren Kriterien sortieren Java Basics - Anfänger-Themen 2
S abbruch nach Ausführung eines ActionListeners...warum? Java Basics - Anfänger-Themen 6
I Sortieren nach Priorität Java Basics - Anfänger-Themen 3
L Javaprogramm nach ausführung des gesammten Cods neu beginnen lassen Java Basics - Anfänger-Themen 9
B Element in Array nach unten verschieben Java Basics - Anfänger-Themen 11
Viktormk Methoden Gleitpunktzahlen nach IEEE 754 addieren ! Java Basics - Anfänger-Themen 1
M String nach float Konvertieren Java Basics - Anfänger-Themen 23
K Sortierung eines int-Arrays von groß nach klein Java Basics - Anfänger-Themen 3
S Input/Output Programm läuft nach input-Abfrage nicht weiter. Java Basics - Anfänger-Themen 2
Clarence Weinberg Eclipse: Package wird erst nach Neustart aktuallisiert Java Basics - Anfänger-Themen 1
X Nach switch case weiter mit Auswahl Java Basics - Anfänger-Themen 7
R Card Layout refresh nach Änderung Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Anzeige

Neue Themen


Oben