ImageIcon lade schlägt fehl

poochie89

Mitglied
Hallo Leute,
ich sitze jetzt schon seit Stunden an dem Problem und kann es mir einfach nicht erklären was schief geht.
Ich möchte einfach in dieser statischen Klasse die für meine Bilder im Projekt zuständig ist, ein IconImage zurückgeben. Die Bilder sind dabei in im Projekt-Ordner unter img/cards/(clubs, diamonds, hearts bzw. spades) gespeichert und tragen die namen 2.png bis A.png für ein Kartendeck.
Ich rufe die Klasse mit der Karte Ass in clubs auf.
Leider wirft er immer meine Exception: "Resource file not found: /img/cards/clubs/A.png".
OS: MacOSX 10.9, IDE Eclipse
Kann mir jemand helfen dem Fehler zu finden 🙂

Gruß, Johannes



Java:
import java.net.URL;

import javax.swing.ImageIcon;
import jt.pokerwizard.fundamentals.Card;

public abstract class ImageManager {
	
	
	private static final String CARD_IMAGES_PATH = "/img/cards/";
	private static final String CONTROL_IMAGES_PATH = "/img/controls/";
	
	public static ImageIcon getCardImage(Card c){
		
		
		String path = CARD_IMAGES_PATH;
		
		path += Card.SUITS_TEXT[c.getSuit()] + "/"+ Card.RANKS_TEXT[c.getRank()] + ".png";
		
		
		URL url = ImageManager.class.getResource(path);
		
        if (url != null) {
            return new ImageIcon(url);
        } else {
            throw new RuntimeException("Resource file not found: " + path);
        }

		
	}
}
 
Liegen die Dateien im ClassPath? Wenn nein, dann wird es nicht gehen. Du versuchst hier Daten aus dem ClassPath auslesen, während die Daten ausserhalb liegen.
Du musst hier wohl eher mit File-Objekten arbeiten... Lies dich da mal ein.

#edit:

language agnostic - Get the application's path - Stack Overflow
java - Get Application Path to create a new File - Stack Overflow


danke für deine schnelle antwort
das hört sich schon mal gut an, ich könnte also den imageordner meines projekts auch einfach zu den buildpaths hinzufügen dann würds auch klappen oder? wie wird das normalerweise am elegantesten gehandhabt wenn man bilder zur gui lädt?

gruß,
johannes
 
Du scheinst in deinem eigenen Projekt nicht mit Packages zu arbeiten, das ist nicht so schön, gewöhne dir das am Besten gleich an. Dann evtl. irgendwie einfach ein Package namens x.y.z.gui.images erstellen wo du deine Bilder ablegst (bzw. evtl. noch ein Package namens cards wenn du willst). Die Klassen der GUI kommen in das übergeordnete gui-Package und dann kannst du dort mittels getResource("images/cards/...") oder absolut über getResource("x/y/z/gui/images/cards/...") zugreifen.
 
ich arbeite schon mit packages, habe nur den befehl hier aus dem quellcode hier gelöscht
ich habe das jetzt so gemacht wie du es geschrieben hast, danke für deine hilfe

gruß,
johannes
 
Naja das mit dem Buildpath ginge sicher, aber: Entweder die Icons sind per Definition im Programm enthalten, dann ab mit ihnen in ein eigenes Package, oder sie liegen daneben. So was halbgare würde ich nicht machen!
 

Zurück
Oben