# Konstruktoraufruf funzt nicht



## Holgrich (2. Dez 2008)

Hallo

auf dem Weg ein Schachbrett zu programmieren das mit der Maus gesteuert wird, müsste ich ein "leeres" Bild in einen Konstruktor geben (Paar ist benutzerdefinierter Datentyp für Koordinaten):


```
super (a,new Paar[28],new Image());
```

allerdings unterstreicht er das _new Image();_ und sagt mir "Cannot instansiate the type Image"

super ist der Konstruktor der Oberklasse der wie folgt läuft:


```
private boolean _Farbe;
	private Paar _Feld;
	private Paar[] _Zuege;
	private Image _img;
	
	public Figur (boolean a, Paar[] b,Image c)
	{
		_Farbe=a;
		_Zuege=b;
		_img=c;
	}
```

Wo ist der Deinhard..ähm Fehler?  ???:L


----------



## SlaterB (2. Dez 2008)

es kann kein Objekt vom Typ Image geben, 
BufferedImage geht vielleicht, aber Image ist nur ein Interface bzw. in diesem Fall eine abstrakte Klasse, auch nicht viel besser,

wenn du das Image nicht verwendest, kannst du vielleicht auch 'null' übergeben


----------



## Holgrich (2. Dez 2008)

Hmm okay dass hatte ich mir auch schon gedacht aber bei Quellcodes im Inet stand das so und deswegen wollt ich mal nachfragen.

Wenn ich null reingeben funktioniert meine Idee trotzdem nicht:

Das Objekt vom Typ Turm soll jetzt neben seinen Zügen und seiner Farbe auch noch sein eigenes Bild kennen. Habe ich wie folgt versucht (einfach analog zu den Zügen...):


```
public class Turm extends Figur
{	
	public Turm (boolean a)
	{
		super (a,new Paar[28],null);
		Paar Zuege[]=getZuege();
		for (int i=0;i<7;i++)
		{	
			Zuege[4*i]=new Paar(i+1,0);
			Zuege[4*i+1]=new Paar(-i-1,0);
			Zuege[4*i+2]=new Paar(0,i+1);
			Zuege[4*i+3]=new Paar(0,-i-1);
		}
        try 
        {
        	Image img=getImage();
        	if (a==true)  img=Toolkit.getDefaultToolkit().getImage(new URL ("file:///f:/Schach/Rook-white.png"));
        	if (a==false) img=Toolkit.getDefaultToolkit().getImage(new URL ("file:///f:/Schach/Rook-black.png"));
        } 
        catch (MalformedURLException e) 
        {
			e.printStackTrace();
		}
	}
```

Dazu die Klasse Figur:



```
import java.awt.*;

public abstract class Figur 
{
	public static final boolean WEISS=true;
	public static final boolean SCHWARZ=false;
	private boolean _Farbe;
	private Paar _Feld;
	private Paar[] _Zuege;
	private Image _img;
	
	public Figur (boolean a, Paar[] b,Image c)
	{
		_Farbe=a;
		_Zuege=b;
		_img=c;
	} ...

}
```


----------



## SlaterB (2. Dez 2008)

irgendeine Frage dazu?

dass bei dir 'irgendwas nicht funktioniert' ist keine Kommunikationsgrundlage


höchstens:
die Variable img aus Turm Zeile 16 wird nirgendwo verwendet,
willst du die per setImage()-Methode speichern?


----------



## Holgrich (2. Dez 2008)

Ja sorry, klar fehlt die Frage. Also das Problem ist, dass das Objekt Turm zwar seine Züge kennt (ohne dass das extra gesezt wurde) allerdings sein Bild nicht. Die Züge werden ja auch nicht mittels setZuege o.ä. übergeben. Allerdings funktioniert das nicht für das Image obwohl ich das genau äquivalent formuliert habe.


----------



## SlaterB (3. Dez 2008)

du hast das Zuege-Objekt  (Variablen klein schreiben!) geladen und dann nur dessen Inhalt verändert,

äquivalent wäre img.setName() oder so,

aber du weist der Variablen img ein neues Objekt zu, das ist was ganz anderes, 
wenn du deiner lokalen Variable etwas neu zuweist, dann interessiert das doch nicht dem gespeicherten Klassenattribut,
verwende setImage() wie gesagt, um das neue Image abzuspeichern,

beim Array wäre die Neuzuweisung zum Vergleich
Zuege = new Paar[100];


----------



## Holgrich (3. Dez 2008)

oki danke


----------

