# MediaTracker



## salomonteneighty (17. Feb 2008)

Hallo zusammen
Ich habe eine Frage wie das genau mit dem Laden von Bildern geht mit Hilfe des MediTracker Klasse. Ich habe dies so  versucht aber er gibt mir an dass ich einen Fehler bei der


> mario.setImages(MarioLaufenRechts, MarioLaufenLinks,
> MarioSpringenRechts, MarioSpringenLinks,
> MarioStehenRechts, MarioStehenLinks);


habe. Das ist die Konsolenausgabe:


> Hallo
> java.lang.NullPointerException
> at Main.init(Main.java:31)
> at sun.applet.AppletPanel.run(Unknown Source)
> at java.lang.Thread.run(Unknown Source)



Kann mir vielleicht jemand sagen was jetzt hier falsch ist oder fehlt? Vielen Dank schon im Voraus.
Liebe Grüsse Philippe


```
import java.awt.*;
import java.applet.Applet;

/**
 * 
 * @author Philippe Heer
 *
 */

public class Main extends Applet implements Runnable{
	
	private Image MarioLaufenRechts;
	private Image MarioLaufenLinks;
	private Image MarioSpringenRechts;
	private Image MarioSpringenLinks;
	private Image MarioStehenRechts;
	private Image MarioStehenLinks;
		
	private Mario mario;
	
//	Thread in dem das Spiel laufen soll
	Thread Main;
			
	public void init(){
//		Grösse des Applets und Hintergrundfarbe festlegen
		setSize(900, 600);
		setBackground(Color.black);
		
		getImages();
				
		mario.setImages(MarioLaufenRechts, MarioLaufenLinks, 
			   		    MarioSpringenRechts, MarioSpringenLinks,
				        MarioStehenRechts, MarioStehenLinks);
		
	}
	public void getImages(){
		MediaTracker tracker = new MediaTracker(this);
		MarioLaufenRechts = getImage (getCodeBase(), "Images/Mario/MarioLaufenRechts.gif");
		tracker.addImage(MarioLaufenRechts, 1);
		MarioLaufenLinks = getImage (getCodeBase(), "Images/Mario/MarioLaufenLinks.gif");
		tracker.addImage(MarioLaufenLinks, 2);
		MarioSpringenRechts = getImage (getCodeBase(), "Images/Mario/MarioSpringenRechts.gif");
		tracker.addImage(MarioSpringenRechts, 3);
		MarioSpringenLinks = getImage (getCodeBase(), "Images/Mario/MarioSpringenLinks.gif");
		tracker.addImage(MarioSpringenLinks, 4);
		MarioStehenRechts = getImage (getCodeBase(), "Images/Mario/MarioStehenRechts.gif");
		tracker.addImage(MarioStehenRechts, 5);
		MarioStehenLinks = getImage (getCodeBase(), "Images/Mario/MarioStehenLinks.gif");
		tracker.addImage(MarioStehenLinks, 6);
		
		System.out.println("Hallo");
		
		try{
			tracker.waitForAll();
		}
		catch (Exception exception){
			
		}
	}
	
	public void start(){
//		Initialisieren und Starten des Threads Main
		Main = new Thread(this);
		Main.start();
	}
	public void run(){
		while (true){
			
			
			
			
		try{
			Thread.sleep(14);	
		}
		catch(Exception exceptioon){
			
		}
			repaint();
		}
	}
	public void paint(Graphics g){
		mario.anzeigen(g);
	}
}
```
Hier noch die Klasse Mario

```
import java.awt.*;

public class Mario{
	
	private Image MarioLaufenRechts;
	private Image MarioLaufenLinks;
	private Image MarioSpringenRechts;
	private Image MarioSpringenLinks;
	private Image MarioStehenRechts;
	private Image MarioStehenLinks;		
	
	private Component parent;
	
	public void setImages(Image MarioLaufenRechts, Image MarioLaufenLinks, 
						  Image MarioSpringenRechts, Image MarioSpringenLinks,
						  Image MarioStehenRechts, Image MarioStehenLinks) {
		this.MarioLaufenRechts = MarioLaufenRechts;
		this.MarioLaufenLinks = MarioLaufenLinks;
		this.MarioSpringenRechts = MarioSpringenRechts;
		this.MarioSpringenLinks =  MarioSpringenLinks;
		this.MarioStehenRechts = MarioStehenRechts;
		this.MarioStehenLinks = MarioStehenLinks;		
	}

	public void anzeigen(Graphics g){
		g.drawImage(MarioLaufenRechts ,100,250,20,32,parent);
		g.drawImage(MarioLaufenLinks ,130,250,20,32,parent);
		g.drawImage(MarioSpringenRechts ,160,250,20,32,parent);
		g.drawImage(MarioSpringenLinks ,190,250,20,32,parent);
		g.drawImage(MarioStehenRechts ,220,250,20,32,parent);
		g.drawImage(MarioStehenLinks ,250,250,20,32,parent);
	}
}
```


----------



## L-ectron-X (17. Feb 2008)

Die setImages()-Methode wird noch vor der Initialisierung der Image-Objekte aufgerufen, daher die NullPointerException.


----------



## salomonteneighty (17. Feb 2008)

L-ectron-X hat gesagt.:
			
		

> Die setImages()-Methode wird noch vor der Initialisierung der Image-Objekte aufgerufen, daher die NullPointerException.



Aber es wird doch mit getImages() auf public void getImages() verwiesen und dann die Bilder geladen oder nicht?
Wie müsste ich den Code verändern?
Lg


----------



## L-ectron-X (17. Feb 2008)

Ups, das hab ich glatt überlesen. Du brauchst ein Mario-Objekt. Dann gehts. Du rufst setImages() auf einer Referenz von Mario auf, die aber noch gar nicht initialisiert ist.


----------



## salomonteneighty (17. Feb 2008)

L-ectron-X hat gesagt.:
			
		

> Ups, das hab ich glatt überlesen. Du brauchst ein Mario-Objekt. Dann gehts. Du rufst setImages() auf einer Referenz von Mario auf, die aber noch gar nicht initialisiert ist. Dann sollte es gehen.



Ich habe eine Klasse Mario auf die verwiesen wird, steht ganz unten sorry wenn man die nicht sieht.
Der Fehler liegt irgendwo anders denke ich...


----------



## L-ectron-X (17. Feb 2008)

Du brauchst aber ein Objekt von Mario, wenn du Methoden dieser Klasse aufrufen willst.


----------



## salomonteneighty (17. Feb 2008)

L-ectron-X hat gesagt.:
			
		

> Du brauchst aber ein Objekt von Mario, wenn du Methoden dieser Klasse aufrufen willst.


Oh stimmt ja vielen Dank für die schnelle Hilfe jetzt funktioniert es


----------

