# Problem MediaTracker



## bend0r (27. Jan 2007)

Hallo, für ein Softwareprektikum müssen wir ein Spielchen basteln.
Nun wollte ich den MediaTracker verwenden um Bilder vorzuladen.

Folgendes:


Aus dem Klassen-Konstruktor

```
MediaTracker mt=new MediaTracker(hauptFenster);
		Image images[]=new Image[5];
```

eine Methode für's Laden:


```
public void addImages()
	{
		Toolkit tk = Toolkit.getDefaultToolkit();		
		images[0] = tk.createImage("level1.gif");
		images[1] = tk.createImage("menu_drei.png");
		images[2] = tk.createImage("cartman_links.gif");
		images[3] = tk.createImage("cartman_rechts.gif");
		images[4] = tk.createImage("block1.gif");
		
		for(int i=0;i<5;i++)
		{
			mt.addImage(images[i], 0);	
		}
		try {
            mt.waitForAll();
        }catch(Exception e){} 
	}
```


Nun fliegt das Programm bei:


> mt.addImage(images_, 0);
> _


_

mit einer NullPointerException raus .

Ich habe leider keine Ahnung warum er rausfliegt; die Bilder werden geladen.
Als Konstruktor für den Media Tracker brauche ich doch eh nur "MediaTracker mt=  new MediaTracker(Instanz die von JFrame)" erbt, oder

kann mir bitte jemand auf die Sprünge helfen?


gruss rene_


----------



## Illuvatar (27. Jan 2007)

Scheint mir so, als hättest du mehrere Variablen mt mit unterschiedlichem Scope, und nur die eine initialisiert. Um den Satz verständlich zu machen, etwas Code:


```
class Whatever
{
  private MediaTracker mt; // der ist null
  public Whatever()
  {
      //Das ist eine andere Variable mt, die am Ende des Konstruktors wieder verworfen wird!
      //Richtig wäre: mt=new MediaTracker(hauptFenster);
      MediaTracker mt=new MediaTracker(hauptFenster); 
      Image images[]=new Image[5];
  }
  public void addImages() 
   { 
      Toolkit tk = Toolkit.getDefaultToolkit();       
      images[0] = tk.createImage("level1.gif"); 
      images[1] = tk.createImage("menu_drei.png"); 
      images[2] = tk.createImage("cartman_links.gif"); 
      images[3] = tk.createImage("cartman_rechts.gif"); 
      images[4] = tk.createImage("block1.gif"); 
       
      for(int i=0;i<5;i++) 
      { 
         // Hier wird auf das mt zugegriffen, das null ist
         mt.addImage(images[i], 0);    
      } 
      try { 
            mt.waitForAll(); 
        }catch(Exception e){} 
   }
}
```


----------



## Apo (27. Jan 2007)

Es müsste eher so gehen ...
Also das ImageArray eher Objektglobal anlegen, damit er es in den Methoden auch kennt.


```
class Whatever
{
  private MediaTracker mt; // der ist null
  private Image[] images;
  public Whatever()
  {
      //Das ist eine andere Variable mt, die am Ende des Konstruktors wieder verworfen wird!
      //Richtig wäre: mt=new MediaTracker(hauptFenster);
      mt=new MediaTracker(hauptFenster); 
      images=new Image[5];
  }
  public void addImages() 
   { 
      Toolkit tk = Toolkit.getDefaultToolkit();       
      images[0] = tk.createImage("level1.gif"); 
      images[1] = tk.createImage("menu_drei.png"); 
      images[2] = tk.createImage("cartman_links.gif"); 
      images[3] = tk.createImage("cartman_rechts.gif"); 
      images[4] = tk.createImage("block1.gif"); 
       
      for(int i=0;i<5;i++) 
      { 
         // Hier wird auf das mt zugegriffen, das null ist
         mt.addImage(images[i], 0);    
      } 
      try { 
            mt.waitForAll(); 
        }catch(Exception e){} 
   }
}
```


----------



## Illuvatar (27. Jan 2007)

Du hast Recht, auf das images-Array hab ich gar nicht geachtet. Da gabs ja aber auch keinen Fehler


----------

