# BufferedImage[] aus anderer Classe auslesen



## Verratus (11. Feb 2014)

Hallo Zusammen

Ich versuche seit einigen Monaten über Foren und Tutorials mir etwas Java beizubringen. Hintergedanke ist ein Game zu machen. Nun stehe ich vor einem Problem welches ich nicht sehe daher wende ich mich an euch.

Aufbau:
Ich lade alle Bilder in einer seperaten Classe in eine BufferedImage[] variable. Diese Classe inizialisiere ich zu beginn. Hintergedanke ist das vermeiden von unnötigem Speicher bei vermehrtem laden der Bilder und eine gute abgrenzung.

Wenn ich nun über System.out.PrintLn das Object in der Classe ausgeben lasse hat es einen Inhalt jedoch nicht wenn ich die Abfrage aus dem Gamethread mache(nach dem inizialisieren der Classe).

Hier mein QuellText:
*ImageLoader*

[Java]
public int staticCount;

//	StaticImage

	public BufferedImage[] staticBackground;
	public String[] staticName;
	public int[] staticPosX, staticPosY;
	public boolean[] staticSubImage;
	public int[] staticNumSubImage;

	public int buttonCount;

	private String NameImg;

	public ImageLoader(){

		 try {
	        	InputStream in = getClass().getClass().getResourceAsStream("/Config/Layout.bin");
				BufferedReader br = new BufferedReader(new InputStreamReader(in));
	            String line = null;
	            while((line = br .readLine()) != null) {
	                // Ganze Zeile:

	            	String[] parts = line.split(" = ");

	            	if (parts[0].contentEquals("Count")) {
	                	staticCount = Integer.parseInt(parts[1]);               	
	                }

	            	staticBackground = new BufferedImage[staticCount];
	            	staticName = new String[staticCount];
	            	staticPosX = new int[staticCount];
	            	staticPosY = new int[staticCount];
	            	staticSubImage = new boolean[staticCount];
	            	staticNumSubImage = new int[staticCount];


	            	for(int num = 0; num < staticCount; num++){ 

	            		if (parts[0].contentEquals("static" + num)) {
	            			String[] parts2 = parts[1].split(", ");
	            			NameImg = "/Image/Base/Desing/" + parts2[0] + num + ".png";
	            			System.out.println("static Image loging..." + NameImg);

	            			staticBackground[num] = ImageIO.read(getClass().getResourceAsStream(NameImg));
	            			staticName[num] = parts2[0];
	            			staticPosX[num] = Integer.parseInt(parts2[1]);
	            			staticPosY[num] = Integer.parseInt(parts2[2]);
	            			staticSubImage[num] = Boolean.parseBoolean(parts2[3]);
	            			staticNumSubImage[num] = Integer.parseInt(parts2[4]);


	            			System.out.println("staticBackground" + num);
	            			System.out.println(staticBackground[num]);

	            			System.out.print(" Y: " + parts2[1] + ", X: " + parts2[2]);
	            			System.out.print(", SubImage " + parts2[3]);
	            			System.out.println(", Nummer of SubImage " + parts2[4]);

	            		}else{
//	            			System.out.println(" No Image found");
//	            			System.out.println(parts[0]);
	            		}
	            	}
	                // ...
	            }
	        } catch(FileNotFoundException e) {
	            e.printStackTrace();
		        } catch(IOException e) {
	            e.printStackTrace();
	        } catch(Exception e) {
		    e.printStackTrace();
		}
	  }
[/code]

*Auszug aus GameThread*

```
public GameThread(ScreenManager scm) {
		super();
		this.scm = scm;
		setPreferredSize(
				new Dimension(scm.HEIGHT, scm.WIDTH));
		setFocusable(true);
		requestFocus();
		System.out.println("GameThread Loding...");
		il = new ImageLoader();
		System.out.println(il.staticBackground[0]);
		
	}
```

*Auszug aus Console*

```
GameThread Loding...
static Image loging.../Image/Base/Desing/Base0.png
staticBackground0
BufferedImage@5ad75c47: type = 5 ColorModel: #pixelBits = 24 numComponents = 3 color space = java.awt.color.ICC_ColorSpace@70eb67e8 transparency = 1 has alpha = false isAlphaPre = false ByteInterleavedRaster: width = 1600 height = 1200 #numDataElements 3 dataOff[0] = 2
 Y: 0, X: 0, SubImage true, Nummer of SubImage 3
null
```

Nach allem was ich in den Foren gelesen habe sollte dies so klappen, jedoch erhalte ich den wert Null.

Danke für eure Unterstützung.


----------



## Bananabert (11. Feb 2014)

Hallo Verratus,

in Zeile 21-30

```
while((line = br .readLine()) != null) {
 //...
 staticBackground = new BufferedImage[staticCount];
}
```
initialisiert du jedes mal deine Variablen neu, sobald eine Zeile eingelesen wird.
Ich könnte mir vorstellen, dass hier der Fehler liegt.

Schau doch mal, ob nach deiner while-schleife immer noch etwas in "BufferedImage[] staticBackground;" steht.


----------



## Verratus (15. Feb 2014)

Danke funktioniert nun hab den fehler wie geschilder beheben können.


----------

