Object = null?

LeaveX

Aktives Mitglied
Hallo,

Hier ma der Code:
Java:
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);
    }
}

Java:
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
Java:
System.out.println("ProtokollFenster = "+pf.getProtokollMosaik());
ein Objekt zurück und beim Aufruf von
Java:
System.out.println("Mosaik = "+mm.getFarbMosaik());
bekomm ich null zurück warum??

MFG
LeaveX
 
null kriegst du, weil du implizit den Default-Konstruktor von Mosaik aufrufst, der nichts auf fm speichert und es dadurch null bleibt.
 
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 😀
 
Java:
public Mosaik()
	{
		start();
	}

hab ich aufgerufen nur bekomm ich eine krasse Fehlermeldung.

Java:
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)
 
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.
 
Java:
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.
 
Java:
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 ^^
 
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(...).
 
Der return wäre void. Ich habe mir das so gedacht:
Java:
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.
 
Java:
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);
	}
}

Java:
/**
 * @(#)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:
Java:
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)
 
Wie hast du denn jetzt eine Instanz von Mosaik erzeugt? Mittels Konstruktor oder hast du Mosaik als Startklasse für eine Applet verwendet?
 

Zurück
Oben