java.lang.NullPointerException

Fastchiller

Grünschnabel
Guten Morgen alle zusammen,
Ich programmiere mir hier gerade ein Spiel zusammen.Und bei dieser Klasse handelt es sich um die Spieleinstellungen.

Problem: Wenn ich den Code in Eclipse(Version 3.2.2) ausführe bekomme ich folgenden Fehler:
Exception in thread "main" java.lang.NullPointerException
at firstgame.Settings.setPositionElement(Settings.java:70)
at firstgame.Settings.<init>(Settings.java:99)
at firstgame.Settings.main(Settings.java:122)

Unter diesem Link habe ich folgendes gefunden:
Der Versuch auf eine Objektrefernz zu zugreifen, die den Wert null enthält. Die Referenz muss entweder mit einer anderen Referenz oder mit dem new-Operator initialisiert werden. Der Fehler kann auch im Zusammenhang mit Hüllklassen auftreten, dazu ein Beispiel:

public class Test {
public static void main(String[] args) {
Integer[] array = new Integer[5];
int i = array[0]; // <-- hier tritt die Exception auf
System.out.println(i);
}
}
Arrays werden in Java standardmäßig mit 0 bzw. null initialisiert. Daher kommt beim Compilieren keine Meldung vom Typ "variable *** might not have been initialized". Wird dann versucht mit dem Integer-Objekt zu arbeiten tritt die Exception auf.

Hoffe ihr könnt mir weiter helfen.
Neben bei noch der Code:
Code:
package firstgame;
import java.awt.Container;
import java.awt.Font;
import javax.swing.*;


/**
 * @author Fastchiller
 */

public class Settings extends JFrame
{
	// Attribute
	private JFrame  Frame;
	private JButton bt_start;
	private JLabel  lb_playername;
	private JLabel  lb_rivalname;
	private JLabel  lb_misspic;
	private JLabel  lb_clickpic;
	private JLabel  lb_emptyfield;
	private JLabel  lb_fieldsize;
	private JLabel  lb_gamespeed;
	private JLabel  lb_pointmax;
	private JLabel  lb_addpic;
	private JPanel  Group;
	private JPanel  Board;
	
	/**
	 * Create the components
	 *
	 */
	public void createComponents()
	{
		bt_start 		= new JButton("Spiel starten"); 
		lb_playername	= new JLabel("Spielername: ");
		lb_rivalname	= new JLabel("Gegnername: ");
		lb_misspic		= new JLabel("Punktevergabe(Bild verpasst): ");
		lb_clickpic		= new JLabel("Punktevergabe(Bild geklickt): ");
		lb_emptyfield	= new JLabel("Punktevergabe(leeres Feld geklickt): ");
		lb_fieldsize	= new JLabel("Spielfeldgrösse: ");
		lb_gamespeed	= new JLabel("Spielgeschwindigkeit: ");
		lb_pointmax		= new JLabel("Punktemaximum: ");
		lb_addpic		= new JLabel("Bild hinzufügen: ");
		Group			= new JPanel();
	}
	
	/**
	 * Height, border and font fix
	 *
	 */
	public void setFormLayout()
	{
		lb_playername.setFont	(new Font ("Arial", Font.PLAIN, 12));
		lb_rivalname.setFont	(new Font ("Arial", Font.PLAIN, 12));
		lb_misspic.setFont 		(new Font ("Arial", Font.PLAIN, 12));
		lb_clickpic.setFont 	(new Font ("Arial", Font.PLAIN, 12));
		lb_emptyfield.setFont	(new Font ("Arial", Font.PLAIN, 12));
		lb_fieldsize.setFont	(new Font ("Arial", Font.PLAIN, 12));
		lb_gamespeed.setFont	(new Font ("Arial", Font.PLAIN, 12));
		lb_pointmax.setFont		(new Font ("Arial", Font.PLAIN, 12));
		lb_addpic.setFont		(new Font ("Arial", Font.PLAIN, 12));
	}
	
	/**
	 * Set the position of the Element
	 *
	 */
	public void setPositionElement()
	{
		Container c = Frame.getContentPane();
	    c.setLayout(null);
	    
	    lb_playername.setBounds	( 10, 10, 250, 20);
		lb_rivalname.setBounds	( 10, 40, 10, 20);
		lb_misspic.setBounds 	( 10, 70, 450, 210);	
		lb_clickpic.setBounds 	( 10,100, 100, 20);
		lb_emptyfield.setBounds	( 10,130, 50, 20);
		lb_fieldsize.setBounds	( 10,160, 40, 20);
		lb_gamespeed.setBounds	( 10,190, 48, 20);
		lb_pointmax.setBounds	( 10,210, 95, 20);	
		lb_addpic.setBounds		( 10,240, 80, 20);
		bt_start.setBounds		(170,190, 75, 20);
		
		c.add(lb_playername); c.add(lb_rivalname); c.add(lb_misspic); c.add(lb_clickpic);
	    c.add(lb_emptyfield); c.add(lb_fieldsize); c.add(lb_gamespeed); c.add(lb_pointmax);
	    c.add(lb_addpic); c.add(bt_start);
	}
	
	/**
	 * Constructer
	 *
	 */
	public Settings()
	{
		super("Spieleinstellungen");
		// Create components
		createComponents();
		setFormLayout();
		setPositionElement();
		Board = new JPanel();
		//Board.setLayout (new GridLayout(11,1));
		// All insert
		Board.add(lb_playername);
		Board.add(lb_rivalname);
		Board.add(lb_misspic);
		Board.add(lb_clickpic);
		Board.add(lb_emptyfield);
		Board.add(lb_fieldsize);
		Board.add(lb_gamespeed);
		Board.add(lb_pointmax);
		Board.add(lb_addpic);
		Board.add(bt_start);
		Board.add(Group);
		setContentPane(Board);
	}
	
	public static void main(String[] args) 
	{
		/**
		 * Create the frame 800 x 800 with the name "Spieleinstellungen"
		 */
		Settings Frame = new Settings();
		Frame.setSize (800,800);
		Frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}

Danke für die schnelle Hilfe

Mfg Fastfchiller
 
Kannst du sagen, wo die Exception geworfen wird? Du benutzt an der Stelle ein Objekt, welches du noch nicht Initialisiert hast.
 
Also die Exception wird bei folgenden Orten geworfen
Code:
Container c = Frame.getContentPane();
,
Code:
setPositionElement();
und
Code:
Settings Frame = new Settings();
 
Code:
private JFrame  Frame;

Du hast den Frame noche gar nicht Initialisiert, nur platz für ihn im Speicherreserviert, aber noch kein Objekt davon erzeugt.

Deshalb kannst du nicht auf ihn zugreifen.
Code:
Container c = Frame.getContentPane();


Ne Frage, wieso legste du hier eine Variable mit dem Selben Namen an?
Code:
Settings Frame = new Settings();
 
Hallo,

die Exception wird hier geworfen
Code:
Container c = Frame.getContentPane();

Frame ist nämlich noch null. Du solltest vorher noch
Code:
Frame = new JFrame()
machen.

Ich verstehe aber nicht, warum du ein neues JFrame erstellen willst. Meiner Meinung wäre das sinnvoller
Code:
Container c = this.getContentPane();

Ich denke nämlich mal, dass du alles auf dem SettingsFrame platzieren möchtest.


MFG

Sascha
 
Code:
Settings Frame = new Settings();
Mhm das war ein versehen. Ach so jetzt geht mir langsam ein Licht auf . Danke für deine Hilfe mal. Ich schau mal, ob es mit deinem Tip geht ;)

@Sascha Schirra: Danke hat funktioniert xD
 
Zuletzt bearbeitet:
Zurück