EclipseProjektProblem - Falsche Pfade !?

mp89

Mitglied
Hallo,

zu aller erst einmal ich benutze Eclipse noch nicht sooo lange und hab mich deshalb noch nicht mit allen Einstellungen (falls das geht ^^) vertraut gemacht. Ich denke mal mein Problem ist eine Einstellungssache, dass da irgendwo was falsch gesetzt wurde vom Classpath, aber erst einmal das Problem an sich:

Hier zu aller erst einmal die Ordnerstruktur:

JSlide (Projektordner)
-src
-src.classes (mit allen .java Dateien die ich so brauche..)
-scr.data.images (für Bilder und noch einen Ordner für Sound)
-bin (für compillierte Dateien)
-bin.classes
-bin.data.images

Jetzt möchte ich einfach nur aus eine Klasse aus dem Paket "classes" ein Bild laden aus dem Paket "data.images". Eigentlich habe ich mir den korrekten Pfad dorthin so vorgestellt: "data/images/bild.jpg". Das geht aber nicht, kp. warum. so würde ich es aber gerne haben wollen. Der Pfad der wieder korrekt wäre wäre folgender: "bin/data/images/bild.jpg". Wieso muss diese bin noch da mit dran? Ich meine wenn das Programm fertig ist, will ich den Benutzer ja nicht das "bin" Verzeichnis installieren lassen, sondern das Classes bzw eine JAR, in der alles geht und in der alle Bilder auch sind. ZU der JAR auch noch etwas, erzeuge ich diese, so muss ich die korrekte Ordnerstruktur außerhalb der JAR herstellen um das Bild anzeigen zu lassen...

irgendwie mach ich wohl was falsch...

Im Anhang nochmal ein Screenshot vom Projekt und dem Code zum Bilder hohlen...
die methode loadImage sieht wie folgt aus:

Image loadImage(String dateiname){
return new ImageIcon(dateiname).getImage();
}



Thx schon mal für einen Tipp was ich da anders einstellen muss.

Gruß Max
 

Anhänge

  • image46.jpg
    image46.jpg
    52,6 KB · Aufrufe: 23
Also wenn eclipse deine Sourcen compiliert geschieht dies in der Ordner bin, da liegen dann also deine Klasse. Deine Bilder werden offenbar auch mit dorthin kopiert.

Wenn du ein Jar erstellst mußt du drauf achten dass du deine Bilder auch mit in dem Jar drin hast!

Am Besten kann man Bilder laden in dem man das direkt von einer Klasse macht die im selben Package liegt.

Also Beispielsweise eine Klasse ImageLoader im Package data.images
Java:
package data.images;
class ImageLoader {
     public static Image loadImage(String name){
           InputStream in = ImageLoader.class.getClassLoader().getResourceAsStream(name);
          if(in != null){
              BufferedImage img = ImageIO.read(in);
              in.close();
              return img;  
          }
     }
}

So in der Art... habs nur mal so getippt.
 
Ich habs mal mit der JAR probiert... nunja, es geht immer noch nicht =(
Und dann habe ich einfach mal alle Klassen in das Verzeichnis kopiert wo auch die Bilder sind, die Pfad umgeändert, so dass nur noch bild.jpg darin stand, ausgeführt und einen weißen Hintergrund (wie eingestellt wenn nix geladen wird) gesehen. Habe die Bilder dann in JSlide/bild.jpg kopiert, also in das Verzeichnis wo auch src und bin enthalten sind und dann konnte er die auch finden, wenn ich nur bild.jpg als File angegeben habe.

Im Anhang noch 2 Screenshots zu der Erstellung des JARs, vielleicht hab ich ja da was falsch gemacht. Es geht wie gesagt immer noch nur so, wenn ich bin/data/images/bild.jpg in dasselbe Verzeichnis wie die JAR Datei kopiere.

Habe auch mal einen GUI Builder ausprobiert und da mal mein Bild als IconImage für einen Button reinladen lassen. Die Pfadangabe zu meinem Bild sag wie folgt aus: "/data/images/bild.jpg" und er hat es gefunden :confused: wie geht das denn bitte. Füge ich diesselbe Pfadangabe auch in meine Klasse ein, passiert nix, kein Bild, nur ein weißer Hintergrund erscheint vor mir...

Hat das eventuell was mit dem Build Path zu tun? Der ist bei meinem Projekt: "JSlide/src" - alles included und nichts excluded.

Gruß Max
 

Anhänge

  • image47.jpg
    image47.jpg
    38 KB · Aufrufe: 22
  • image48.jpg
    image48.jpg
    31,8 KB · Aufrufe: 14
Nachtrag: hier nochmal der komplette Quellcode für das Laden der paar Bilder


Java:
public void loadImages() {
        // load images
        bgImage = loadImage("background.jpg");
        Image player1 = loadImage("player1.png");
        Image player2 = loadImage("player2.png");
        Image player3 = loadImage("player3.png");
        

        // create animation
        anim = new Animation();
        anim.addFrame(player1, 250);
        anim.addFrame(player2, 150);
        anim.addFrame(player1, 150);
        anim.addFrame(player2, 150);
        anim.addFrame(player3, 200);
        anim.addFrame(player2, 150);
    }
	
	private Image loadImage(String fileName) {
		System.out.println("Datei : " + new File(fileName).exists());
        return new ImageIcon(fileName).getImage();
//ImageIcon statt IconImage oder BufferedImage, weil ich gelesen habe, dass ich dann keinen MediaTracker brauche um zu prüfen, dass alle / das Bild/er geladen sind.
    }

Das System.out. zeigt auch immer fein an, dass die Dateien unter dem von mir als korrekt angesehenen Pfad, unter dem der GUI Builder die auch findet, nicht existieren. (in diesem Fall muss ich wie bereits erwähnt die Bilder im JSlide Ordner haben damit alles läuft.)
 
Nach ein wenig rumgebastel gings dann doch noch.
Dank dir! :):):):):):):)

Hier die fertige Funktion
Java:
public Image loadImage2(String name){
		InputStream in = AnimationRunner.class.getClassLoader().getResourceAsStream(name);
		BufferedImage img = null;
		if(in != null){
			try {
				img = ImageIO.read(in);
				in.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
	        return (Image)img;  
	    }
		return img;
	}
Funktioniert aus jedem Paket:)

Aber wieso ging das mit meiner ursprünglichen Funktion eigentlich nicht?

Gruß Max
 
Zurück