# Object = null?



## LeaveX (2. Jan 2010)

Hallo,

Hier ma der Code:

```
import java.awt.*;

public class ProtokollFenster extends Frame {
	
	ProtokollMosaik pm;
	
	Mosaik mm;
	
	public ProtokollMosaik getProtokollMosaik() 
	{ 
		return pm; 
	} 
	

    public ProtokollFenster(String titel, int width, int raster, Color farbeRueck, Color farbeVor, int x, int y) {
    	
    	super(titel);
    	
    	this.setSize(width, width);
    	
    	pm = new ProtokollMosaik(raster, width, farbeRueck, farbeVor);
    	
		this.add(pm);
		
		mm = new Mosaik();
		
		System.out.println("Mosaik = "+mm.getFarbMosaik());
		
		//pm.getProtokollModel().setMosaikModel(mm.getFarbMosaik().getMosaikModel());
    	
    	this.setLocation(x,y);
    	
    	this.setResizable(false);
    	
    	this.setVisible(true);
    }
}
```


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

public class Mosaik extends Applet{

	private Color farbeRueck, farbeVor;
	private int raster;
	private String temp2;

	ProtokollFenster pf;
	
	FarbMosaik fm;
	ProtokollMosaik pm;
	
	public FarbMosaik getFarbMosaik() 
	{ 		
		return fm; 
	}
	
    public void init()
    {
    	resize(250, 280);
    	
    	String temp = getParameter("raster");
    	temp2 = getParameter("protokollfenster");
    	
    	try{
    		raster=Integer.parseInt(temp);
    	} catch(NumberFormatException nfe)
    	{
    		raster=5;
    		System.out.println("Default="+raster+" gesetzt. NumberFormatException: "+nfe.getMessage());
    	}
    }
    
    public void start()
    {
    	farbeRueck = new Color(230, 30, 50);
    	farbeVor = new Color(50, 210, 30);  
    	
    	FarbMosaik fm = new FarbMosaik(raster, getSize().width, farbeRueck, farbeVor);
    	this.add(fm); 
    	
    	if(temp2.compareTo("on") == 0)
    	{
       		Rectangle bounds = this.getBounds();
       		Point p = this.getLocation();
    		
    		pf = new ProtokollFenster("Protokollfenster", getSize().width, raster, farbeRueck, farbeVor, p.x+bounds.width+7, p.y);
    		
    		
    		fm.getMosaikModel().setProtokollModel (pf.getProtokollMosaik().getProtokollModel());
    		
    		System.out.println("ProtokollFenster = "+pf.getProtokollMosaik());
    		
    		//pm.getProtokollModel().setMosaikModel(this.getFarbMosaik().getMosaikModel());
    	}
    }
}
```

Warum bekomm ich beim Aufruf von 
	
	
	
	





```
System.out.println("ProtokollFenster = "+pf.getProtokollMosaik());
```
 ein Objekt zurück und beim Aufruf von 
	
	
	
	





```
System.out.println("Mosaik = "+mm.getFarbMosaik());
```
 bekomm ich null zurück warum??

MFG
LeaveX


----------



## javimka (2. Jan 2010)

null kriegst du, weil du implizit den Default-Konstruktor von Mosaik aufrufst, der nichts auf fm speichert und es dadurch null bleibt.


----------



## Kr0e (2. Jan 2010)

Du hast mm.getFarbMosaik() also das Object fm nicht erstellt. fm wird in der Methode start() erstellt.
start() wird garnciht aufgerufen. Das kann nciht klappen.

Entweder du rufst noch start() auf oder packst start() in den bei dir zur Zeit nicht definierten Konstruktor...

Gruß,

Chris

PS: Zu spät


----------



## LeaveX (2. Jan 2010)

Hi und danke für die Antworten. jetzt versteh ich Bahnhof satart wird doch aufgerufen oder wie?


----------



## javimka (2. Jan 2010)

Nur wenn du es als Applet startest, aber nicht, wenn du eine andere Klasse startest.


----------



## LeaveX (2. Jan 2010)

```
public Mosaik()
	{
		start();
	}
```

hab ich aufgerufen nur bekomm ich eine krasse Fehlermeldung.


```
java.lang.IllegalArgumentException: rows and cols cannot both be zero
	at java.awt.GridLayout.<init>(Unknown Source)
	at FarbMosaik.<init>(FarbMosaik.java:14)
	at Mosaik.start(Mosaik.java:30)
	at Mosaik.<init>(Mosaik.java:22)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
```


----------



## javimka (2. Jan 2010)

So krass ist die Exception nun auch wieder nicht. Irgendwo verwendest du ein GridLayout und übergibst dem Konstruktor zwei mal das Argument 0: [c]new GridLayout(0,0);[/c] führt zu dieser Exception.


----------



## LeaveX (2. Jan 2010)

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

public class Mosaik extends Applet{

	private Color farbeRueck, farbeVor;
	private int raster;
	private String temp2;

	ProtokollFenster pf;
	
	FarbMosaik fm;
	ProtokollMosaik pm;
	
	public FarbMosaik getFarbMosaik()
	{
		return fm;
	}
	
	public void init()
    {
    	resize(250, 280);
    	
    	String temp = getParameter("raster");
    	temp2 = getParameter("protokollfenster");
    	
    	try{
    		raster=Integer.parseInt(temp);
    	} catch(NumberFormatException nfe)
    	{
    		raster=5;
    		System.out.println("Default="+raster+" gesetzt. NumberFormatException: "+nfe.getMessage());
    	}
    }
	
	public Mosaik()
	{
		farbeRueck = new Color(230, 30, 50);
    	farbeVor = new Color(50, 210, 30);  
    	
    	FarbMosaik fm = new FarbMosaik(raster, getSize().width, farbeRueck, farbeVor);
    	this.add(fm); 
    	
    	getFarbMosaik();
    	
    	if(temp2.compareTo("on") == 0)
    	{
       		Rectangle bounds = this.getBounds();
       		Point p = this.getLocation();
    		
    		pf = new ProtokollFenster("Protokollfenster", getSize().width, raster, farbeRueck, farbeVor, p.x+bounds.width+7, p.y);
    		
    		
    		fm.getMosaikModel().setProtokollModel (pf.getProtokollMosaik().getProtokollModel());
    		
    		System.out.println("ProtokollFenster = "+pf.getProtokollMosaik());
    		
    		//pm.getProtokollModel().setMosaikModel(this.getFarbMosaik().getMosaikModel());
    	}
    }
}
```

Wenn ich aber die init in den Konstruktor Packe dann kennt der nimmer getParameter.


----------



## javimka (2. Jan 2010)

getParamter() wird bei mit erkannt.


----------



## LeaveX (2. Jan 2010)

Und wie löse ich am besten mein problem dass getParameter den Wert aus liest und dem Konstruktor übergeben wird?


----------



## LeaveX (2. Jan 2010)

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

public class Mosaik extends Applet{

	private Color farbeRueck, farbeVor;
	private int raster;
	private String temp2;

	ProtokollFenster pf;
	
	FarbMosaik fm;
	ProtokollMosaik pm;
	
	public FarbMosaik getFarbMosaik()
	{
		return fm;
	}
	
	public Mosaik()
	{
		resize(250, 280);
    	
    	String temp = getParameter("raster");
    	temp2 = getParameter("protokollfenster");
    	
    	try{
    		raster=Integer.parseInt(temp);
    	} catch(NumberFormatException nfe)
    	{
    		raster=5;
    		System.out.println("Default="+raster+" gesetzt. NumberFormatException: "+nfe.getMessage());
    	}

		farbeRueck = new Color(230, 30, 50);
    	farbeVor = new Color(50, 210, 30); 
    	
    	FarbMosaik fm = new FarbMosaik(raster, getSize().width, farbeRueck, farbeVor);
    	this.add(fm); 
    	
    	getFarbMosaik();
    	
    	if(temp2.compareTo("on") == 0)
    	{
       		Rectangle bounds = this.getBounds();
       		Point p = this.getLocation();
    		
    		pf = new ProtokollFenster("Protokollfenster", getSize().width, raster, farbeRueck, farbeVor, p.x+bounds.width+7, p.y);
    		
    		
    		fm.getMosaikModel().setProtokollModel (pf.getProtokollMosaik().getProtokollModel());
    		
    		System.out.println("ProtokollFenster = "+pf.getProtokollMosaik());
    		
    		//pm.getProtokollModel().setMosaikModel(this.getFarbMosaik().getMosaikModel());
    	}
    }
}
```

Bei mir nicht ^^


----------



## javimka (2. Jan 2010)

Schreib doch eine private Methode initialize(Argumente). Wenn nun init() aufgerufen wird, holt init() die Argumente mit getParameter und übergibt sie initialize(...). Wenn der Konstruktor mit Argumenten aufgerufen wird, übergibt er die erhaltenen Argumente der Methode initialize(...).


----------



## LeaveX (2. Jan 2010)

Irgendwie stehe ich voll auf der Seife. Welchen Return muss ich dann angeben?


----------



## javimka (2. Jan 2010)

Der return wäre void. Ich habe mir das so gedacht:

```
public class Mosaik extends Applet {

  // Konstruktor
  public Mosaik(Arg1 arg1, Arg2 arg2, ...) {
    initialize(arg1, arg2, ...);
  }

  // init
  public init() {
    Arg1 arg1 = getParameter("Arg1");
    Arg2 arg2 = getParameter("Arg2");
    ...
    initialize(arg1, arg2, ...);
  }

  // Hier wird das Objekt zusammengebastelt
  private void initialize(Arg1 arg1, Arg2 arg2, ...) {
    ... // Alles, was gemacht werden muss
  }
}
```

So kommt es nicht mehr darauf an, ob du eine Instanz der Klasse mittels Konstruktor erzeugst oder ob du die Klasse Mosaik als Startklasse für ein Applet nimmst und es mit init() startest.


----------



## LeaveX (2. Jan 2010)

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

public class Mosaik extends Applet{

	private Color farbeRueck, farbeVor;
	private int raster;
	private String temp, temp2;
	
	
	private int initRaster; 
	private String initTemp, initTemp2; 

	ProtokollFenster pf;
	
	FarbMosaik fm;
	ProtokollMosaik pm;
	
	public FarbMosaik getFarbMosaik()
	{
		return fm;
	}
	
	public void init()
    {
		
    	resize(250, 280);
    	
    	temp = getParameter("raster");
    	temp2 = getParameter("protokollfenster");
    	
    	try{
    		raster=Integer.parseInt(temp);
    	} catch(NumberFormatException nfe)
    	{
    		raster=5;
    		System.out.println("Default="+raster+" gesetzt. NumberFormatException: "+nfe.getMessage());
    	}
    	
    	initialization(raster, temp, temp2);
    }
	
	public void initialization(int initRaster, String initTemp, String initTemp2)
	{				
		farbeRueck = new Color(230, 30, 50);
    	farbeVor = new Color(50, 210, 30); 
    	
    	FarbMosaik fm = new FarbMosaik(raster, getSize().width, farbeRueck, farbeVor);
    	this.add(fm); 
    	
    	getFarbMosaik();
    	
    	if(temp2.compareTo("on") == 0)
    	{
       		Rectangle bounds = this.getBounds();
       		Point p = this.getLocation();
    		
    		pf = new ProtokollFenster("Protokollfenster", getSize().width, raster, farbeRueck, farbeVor, p.x+bounds.width+7, p.y);
    		
    		
    		fm.getMosaikModel().setProtokollModel (pf.getProtokollMosaik().getProtokollModel());
    		
    		System.out.println("ProtokollFenster = "+pf.getProtokollMosaik());
    		
    		//pm.getProtokollModel().setMosaikModel(this.getFarbMosaik().getMosaikModel());
    	}
    }
	
	public Mosaik(int initRaster, String initTemp, String initTemp2)
	{
		initialization(initRaster, initTemp, initTemp2);
	}
}
```


```
/**
 * @(#)ProtokollFenster.java
 *
 *
 * @author 
 * @version 1.00 2009/12/23
 */
import java.awt.*;

public class ProtokollFenster extends Frame {
	
	ProtokollMosaik pm;
	
	Mosaik mm;
	
	public ProtokollMosaik getProtokollMosaik() 
	{ 
		return pm; 
	} 
	

    public ProtokollFenster(String titel, int width, int raster, Color farbeRueck, Color farbeVor, int x, int y) {
    	
    	super(titel);
    	
    	this.setSize(width, width);
    	
    	pm = new ProtokollMosaik(raster, width, farbeRueck, farbeVor);
    	
		this.add(pm);
		
		System.out.println("Mosaik = "+mm.getFarbMosaik());
		
		//pm.getProtokollModel().setMosaikModel(mm.getFarbMosaik().getMosaikModel());
    	
    	this.setLocation(x,y);
    	
    	this.setResizable(false);
    	
    	this.setVisible(true);
    }
}
```

Error:

```
Laden: Instanz von Mosaik.class kann nicht erstellt werden.
java.lang.InstantiationException: Mosaik
	at java.lang.Class.newInstance0(Unknown Source)
	at java.lang.Class.newInstance(Unknown Source)
	at sun.applet.AppletPanel.createApplet(Unknown Source)
	at sun.applet.AppletPanel.runLoader(Unknown Source)
	at sun.applet.AppletPanel.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
```


----------



## javimka (2. Jan 2010)

Wie hast du denn jetzt eine Instanz von Mosaik erzeugt? Mittels Konstruktor oder hast du Mosaik als Startklasse für eine Applet verwendet?


----------



## LeaveX (3. Jan 2010)

Hallo,

Sorry dass ich jetzt erst schreiben kann. ich habe Mosaik als Startklasse verwendet.


----------

