NullPointerException bei Aufruf von Methode

phil111

Mitglied
Hallo,

ich muss für die Schule ein Spiel programmieren und habe mir das Fifteen Puzzle heraus gesucht.Zuerst hatte ich eine Klasse Feld, Klasse GUI mit der main und eine Klasse Oberfläche, nun wollte ich aber die Methoden aus der Oberfläche nochmal in eine extra Klasse verschieben ,da mir das
nicht so gefiel alles in einer Klasse. Nun bekomme ich aber immer eine NullPointerException und weiß einfach nicht an was das liegt.

Hier mal der Java Code

Klasse Feld:
Java:
package oberflaeche;

import javax.swing.JButton;

public class Feld {

	private int nr;
	private boolean attrib = true;
	public JButton button = new JButton();
	
	public Feld (int nr) {
		this.nr = nr;
		buttonRefresh();
	}
	
	public void setPlacement (int i) {
		if (i < 4) {
			button.setBounds(i * 50, 0, 50, 50);
		} else if (i < 8) {
			button.setBounds((i - 4) * 50, 50, 50, 50);	
		} else if (i < 12) {
			button.setBounds((i - 8) * 50, 100, 50, 50);	
		} else {
			button.setBounds((i - 12) * 50, 150, 50, 50);	
		}
	}
	
	public boolean getAttrib () {
		return attrib;
	}
	
	public void changeAttrib () {
		attrib = !attrib;
		buttonRefresh();
	}
	
	public void buttonRefresh () {
		if (attrib) {
			button.setText(String.valueOf(nr));
		} else {
			button.setText(" ");
		}
	}
	
	public void setNr (int nr) {
		this.nr = nr;
		buttonRefresh();
	}
	
	public int getNr () {
		return nr;
	}
	
	public JButton getButton () {
		return button;
	}
}

Klasse Oberfläche:
Java:
package oberflaeche;

import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;


public class Oberflaeche  {

	public JFrame jFrame = null;  //  @jve:decl-index=0:visual-constraint="25,19"
	public JPanel jContentPane = null;
	public Feld[] felder = new Feld[16];
	public boolean[] random = new boolean[16];
	public JButton startButton = null;
	public JButton loadGame = null;
	public JLabel jLabel = null;
	public int spielzuege = 0;
	public boolean load = true;
	public JButton saveButton = null;
	public JLabel lbGewinn = null;
	/**
	 * This method initializes jFrame	
	 * 	
	 * @return javax.swing.JFrame	
	 */
	public JFrame getJFrame() {
		if (jFrame == null) {
			jFrame = new JFrame();
			jFrame.setSize(new Dimension(217, 424));
			jFrame.setVisible(true);
			jFrame.setTitle("Fifteen");
			jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			jFrame.setContentPane(getJContentPane());
			jContentPane.updateUI();
		}
		return jFrame;
	}
	
	public void addActions () {
		felder[0].button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (pFifteen.checkEmptyBox(0)) {
					pFifteen.changeBox(0, pFifteen.giveEmptyBox());
				}
			}
		});
		felder[1].button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (pFifteen.checkEmptyBox(1)) {
					pFifteen.changeBox(1, pFifteen.giveEmptyBox());
				}
			}
		});
		felder[2].button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (pFifteen.checkEmptyBox(2)) {
					pFifteen.changeBox(2, pFifteen.giveEmptyBox());
				}
			}
		});
		felder[3].button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (pFifteen.checkEmptyBox(3)) {
					pFifteen.changeBox(3, pFifteen.giveEmptyBox());
				}
			}
		});
		felder[4].button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (pFifteen.checkEmptyBox(4)) {
					pFifteen.changeBox(4, pFifteen.giveEmptyBox());
				}
			}
		});
		felder[5].button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (pFifteen.checkEmptyBox(5)) {
					pFifteen.changeBox(5, pFifteen.giveEmptyBox());
				}
			}
		});
		felder[6].button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (pFifteen.checkEmptyBox(6)) {
					pFifteen.changeBox(6, pFifteen.giveEmptyBox());
				}
			}
		});
		felder[7].button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (pFifteen.checkEmptyBox(7)) {
					pFifteen.changeBox(7, pFifteen.giveEmptyBox());
				}
			}
		});
		felder[8].button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (pFifteen.checkEmptyBox(8)) {
					pFifteen.changeBox(8, pFifteen.giveEmptyBox());
				}
			}
		});
		felder[9].button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (pFifteen.checkEmptyBox(9)) {
					pFifteen.changeBox(9, pFifteen.giveEmptyBox());
				}
			}
		});
		felder[10].button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (pFifteen.checkEmptyBox(10)) {
					pFifteen.changeBox(10, pFifteen.giveEmptyBox());
				}
			}
		});
		felder[11].button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (pFifteen.checkEmptyBox(11)) {
					pFifteen.changeBox(11, pFifteen.giveEmptyBox());
				}
			}
		});
		felder[12].button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (pFifteen.checkEmptyBox(12)) {
					pFifteen.changeBox(12, pFifteen.giveEmptyBox());
				}
			}
		});
		felder[13].button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (pFifteen.checkEmptyBox(13)) {
					pFifteen.changeBox(13, pFifteen.giveEmptyBox());
				}
			}
		});
		felder[14].button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (pFifteen.checkEmptyBox(14)) {
					pFifteen.changeBox(14, pFifteen.giveEmptyBox());
				}
			}
		});
		felder[15].button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (pFifteen.checkEmptyBox(15)) {
					pFifteen.changeBox(15, pFifteen.giveEmptyBox());
				}
			}
		});
	}

	
	
	/**
	 * This method initializes jContentPane	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	
	public JPanel getJContentPane() {
		if (jContentPane == null) {
			lbGewinn = new JLabel();
			lbGewinn.setBounds(new Rectangle(19, 340, 163, 29));
			lbGewinn.setText("");
			jLabel = new JLabel();
			jLabel.setBounds(new Rectangle(19, 319, 163, 16));
			jLabel.setText("Anzahl der Spielzüge: 0");
			jContentPane = new JPanel();
			jContentPane.setLayout(null);
			jContentPane.add(getStartButton(), null);
			jContentPane.add(getLoadGame(), null);
			jContentPane.add(jLabel, null);
			jContentPane.add(getSaveButton(), null);
			jContentPane.add(lbGewinn, null);
			
			
		}
		return jContentPane;
	}
	
	/**
	 * This method initializes startButton	
	 * 	
	 * @return javax.swing.JButton	
	 */
	public JButton getStartButton() {
		if (startButton == null) {
			startButton = new JButton();
			startButton.setBounds(new Rectangle(15, 255, 166, 24));
			startButton.setText("New Game");
			startButton.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					load = false;
					pFifteen.initialiseButtons();
					loadGame.setVisible(false);
					startButton.setVisible(false);
					saveButton.setVisible(true);
				}
			});
		}
		return startButton;
	}
	
	
	/**
	 * This method initializes loadGame	
	 * 	
	 * @return javax.swing.JButton	
	 */
	public JButton getLoadGame() {
		if (loadGame == null) {
			loadGame = new JButton();
			loadGame.setBounds(new Rectangle(15, 285, 166, 24));
			loadGame.setText("Load Game");
			loadGame.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					load = true;
					pFifteen.initialiseButtons();
					startButton.setVisible(false);
					loadGame.setVisible(false);
					saveButton.setVisible(true);
				}
			});
		}
		return loadGame;
	}

	/**
	 * This method initializes saveButton	
	 * 	
	 * @return javax.swing.JButton	
	 */
	public JButton getSaveButton() {
		if (saveButton == null) {
			saveButton = new JButton();
			saveButton.setBounds(new Rectangle(15, 255, 166, 24));
			saveButton.setText("Speichern..");
			saveButton.setVisible(false);
			saveButton.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					pFifteen.save();
				}
			});
		}
		return saveButton;
	}

	
	/*
 * (non-javadoc)
 */
private Fifteen pFifteen; 
}

Klasse Fifteen:

Java:
package oberflaeche;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Fifteen {
	private Fifteen pFifteen=this;
	
	public boolean checkEmptyBox (int i) {
		boolean possible = false;
		if (i == 0) {
			if (!(pOberflaeche.felder[i + 1].getAttrib()) || !(pOberflaeche.felder[i + 4].getAttrib())) {
				possible = true;
			}
		} else if (i == 1 || i == 2) {
			
			if (!(pOberflaeche.felder[i - 1].getAttrib()) || 
					!(pOberflaeche.felder[i + 1].getAttrib()) || 
					!(pOberflaeche.felder[i + 4].getAttrib())) {
				possible = true;
			}
		} else if (i == 3) {
			if (!(pOberflaeche.felder[i - 1].getAttrib()) || 
					!(pOberflaeche.felder[i + 4].getAttrib())) {
				possible = true;
			}
		} else if (i == 4 || i == 8) {
			if (!(pOberflaeche.felder[i - 4].getAttrib()) || 
					!(pOberflaeche.felder[i + 1].getAttrib()) || 
					!(pOberflaeche.felder[i + 4].getAttrib())) {
				possible = true;
			}
		} else if (i == 5 || i == 6 || i == 9 || i == 10) {
			if (!(pOberflaeche.felder[i - 4].getAttrib()) || 
					!(pOberflaeche.felder[i - 1].getAttrib()) || 
					!(pOberflaeche.felder[i + 1].getAttrib()) || 
					!(pOberflaeche.felder[i + 4].getAttrib())) {
				possible = true;
			}
		} else if (i == 7 || i == 11) {
			if (!(pOberflaeche.felder[i - 4].getAttrib()) || 
					!(pOberflaeche.felder[i - 1].getAttrib()) || 
					!(pOberflaeche.felder[i + 4].getAttrib())) {
				possible = true;
			}
		}else if (i == 12) {
			if (!(pOberflaeche.felder[i - 4].getAttrib()) || !(pOberflaeche.felder[i + 1].getAttrib())) {
				possible = true;
			}
		} else if (i == 13 || i == 14) {
			if (!(pOberflaeche.felder[i - 1].getAttrib()) || 
					!(pOberflaeche.felder[i + 1].getAttrib()) || 
					!(pOberflaeche.felder[i - 4].getAttrib())) {
				possible = true;
			}
		} else if (i == 15) {
			if (!(pOberflaeche.felder[i - 1].getAttrib()) || 
					!(pOberflaeche.felder[i - 4].getAttrib())) {
				possible = true;
			}
		}
		return possible;
	}
	
	public int giveEmptyBox () {
		int field = 0;
		for (int i = 0; i < 16; i++) {
			if (!(pOberflaeche.felder[i].getAttrib())) {
				field = i;
			}
		}
		return field;
	}
	
	public void changeBox (int i, int y) {
		int temp = pOberflaeche.felder[y].getNr();
		boolean check = true;
		pOberflaeche.spielzuege ++;
		pOberflaeche.jLabel.setText("Anzahl der Spielzüge: " + pOberflaeche.spielzuege);
		pOberflaeche.felder[i].changeAttrib();
		pOberflaeche.felder[y].changeAttrib();
		pOberflaeche.felder[y].setNr(pOberflaeche.felder[i].getNr());
		pOberflaeche.felder[i].setNr(temp);
		for (int x = 0; x < 15; x++) {
			if (x == pOberflaeche.felder[x].getNr() - 1){
				check = true;
			} else {
				check = false;
				break;
			}
		}
		if (check) {
			pOberflaeche.lbGewinn.setText("Du hast Gewonnen");
	//		System.out.println("Sie haben gewonnen");
		}
		
	}
	public void initialiseButtons () {
		if (!pOberflaeche.load) {
			boolean besetzt = true;
			for (int i = 0; i < 16; i++) {
				pOberflaeche.random[i] = false;
			}
			int count = 16;
			int temp = 0;
			for (int i = 0; i < 16; i++) {
				while (besetzt) {
					temp = (int) ((Math.random() * 1000) % count);
					if (!pOberflaeche.random[temp]) {
						besetzt = !besetzt;
						pOberflaeche.felder[i] = new Feld(temp + 1);		
						pOberflaeche.random[temp] = true;
					}
				}
				besetzt = !besetzt;
				pOberflaeche.felder[i].setPlacement(i);
			}
		} else {
			try {
				BufferedReader in = new BufferedReader(new FileReader("spielstand.txt"));
				String zeile = null;
				for (int i = 0; i < 16; i++) {
					zeile = in.readLine();
					pOberflaeche.felder[i] = new Feld(Integer.parseInt(zeile));
					pOberflaeche.felder[i].setPlacement(i);
				}
				pOberflaeche.spielzuege = Integer.parseInt(in.readLine());
				pOberflaeche.jLabel.setText("Anzahl der Spielzüge: " + pOberflaeche.spielzuege);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		for (int i = 0; i < 16; i++) {
			if (pOberflaeche.felder[i].getNr() == 16) {
				pOberflaeche.felder[i].changeAttrib();
			}
		}
		pOberflaeche.addActions();
		for (Feld f : pOberflaeche.felder) {
			pOberflaeche.jContentPane.add(f.getButton());
		}
		pOberflaeche.jContentPane.updateUI();
	}

	public void save () {
		try
		{
			File file = new File("spielstand.txt");
			FileWriter fw = new FileWriter(file);
			
			for (Feld e : pOberflaeche.felder) {
				fw.write(e.getNr() + "\n");
			}
			fw.write(pOberflaeche.spielzuege + "\n");
			
			fw.flush();
			fw.close();
		}
		catch( IOException e )
		{
			e.printStackTrace();
		}
	}
	/*
 * (non-javadoc)
 */
private Oberflaeche pOberflaeche;

}

Klasse GUI:
Java:
package oberflaeche;

import javax.swing.JFrame;

public class GUI {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Oberflaeche oberflaeche = new Oberflaeche();
		JFrame frame = oberflaeche.getJFrame();
	}

}
Und die Fehlermeldung:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at oberflaeche.Oberflaeche$17.actionPerformed(Oberflaeche.java:209)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

Ich hoffe Ihr könnt mir irgendwie helfen, bin noch nicht der Beste im Programmieren ;)

Grüße
 

phil111

Mitglied
Meinst du dies hier :
[JAVA=267]private Fifteen pFifteen;[/code]
das ist ja der pointer zur Klasse Fifteen damit die Oberfläche auf die Klasse Fifteen zugreifen kann oder?
 

phil111

Mitglied
Ich habe dass jetzt gelassen mit der Klasse Fifteen und alles in der Oberfläche gelassen. Ich möchte jetzt noch anstatt der Zahlen , Bilder auf den Buttons haben, bloß wo muss ich dass einfügen mit ImageIcon und setIcon? Wäre echt nett wenn mir da jemand weiterhelfen könnte ;) .
 

phil111

Mitglied
Hey

schonmal Danke ;).. So im Grunde wie ich ein Bild auf ein Button bekommen weiß ich .. bloß habe ich keine ahnung wie ich des jetzt in den quelltext einfüge damit er statt die nr die bilder auf die Buttons macht und dann auch vermischt ???:L
 

pl4gu33

Top Contributor
wenn das Bild z.b. im ProjektOrdner ist ... so zum Beispiel ;)

Java:
ImageIcon icon=new ImageIcon("b1.jpg");				
JButton btn=new JButton(icon);
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T NullPointerException bei scheduleAtFixedRate Spiele- und Multimedia-Programmierung 1
D Java Bomberman Probleme java.lang.NullPointerException Spiele- und Multimedia-Programmierung 1
TheSorm Problem mit 2 classen NullPointerException Spiele- und Multimedia-Programmierung 1
S eine nullpointerexception, wo sie nicht sein sollte Spiele- und Multimedia-Programmierung 12
antonbracke Multiplayer Shooter mit NullPointerException Spiele- und Multimedia-Programmierung 4
D NullPointerException Spiele- und Multimedia-Programmierung 5
D Problem mit MouseMotionListener / NullPointerException Spiele- und Multimedia-Programmierung 10
R Aufruf einer render-Methode Spiele- und Multimedia-Programmierung 12
W rekursiver aufruf zum aufdecken von feldern bei minesweeper Spiele- und Multimedia-Programmierung 2
S Sudoku Solver funktioniert beim 2. Aufruf nicht mehr Spiele- und Multimedia-Programmierung 11
B paintComponent Methode Spiele- und Multimedia-Programmierung 4
P Zahlenwert durch Methode ersetzen Spiele- und Multimedia-Programmierung 1
P .Wav Datei vor main-Methode abspielen? Spiele- und Multimedia-Programmierung 9
H Exeption in thread "Thread-2" NullPointerExeption: init methode? Spiele- und Multimedia-Programmierung 25
S GetBufferStrategy-Methode wird nicht angezeigt Spiele- und Multimedia-Programmierung 6
K Flackern bei repaint Methode Spiele- und Multimedia-Programmierung 3
A Zeichnen außerhalb der paint-Methode Spiele- und Multimedia-Programmierung 6
G Methode sleepen während das Spiel weiterläuft Spiele- und Multimedia-Programmierung 3
M Beste methode zur Map Erstellen in "Block" Games Spiele- und Multimedia-Programmierung 2
J Images laden in static Methode Spiele- und Multimedia-Programmierung 8
G Mein erstes minigame -> problem mit Methode Spiele- und Multimedia-Programmierung 3
D Problem Mit Miensweeper Clone & rekursive Methode Spiele- und Multimedia-Programmierung 4
M Run- Methode zu überladen Spiele- und Multimedia-Programmierung 4
S Methode verändert mein Eingabe Array oO Spiele- und Multimedia-Programmierung 6
S Problem beim laden eines Bildes in einer Methode Spiele- und Multimedia-Programmierung 14
D Methode in eigenem Thread auslagern Spiele- und Multimedia-Programmierung 9
A Hilfe bei der Methode COLOR (Java) Spiele- und Multimedia-Programmierung 10
S transparenz per paint()-methode will nicht Spiele- und Multimedia-Programmierung 12
H Bilder speichern 2 - Methode richten? Spiele- und Multimedia-Programmierung 2
S Zur Laufzeit auf die Methode einer anderen Klasse zugreifen Spiele- und Multimedia-Programmierung 5
A Methode:setPointAntialiasingEnable(true) Spiele- und Multimedia-Programmierung 2
chik Wie arbeitet die polygon.contains Methode in Java Spiele- und Multimedia-Programmierung 4

Ähnliche Java Themen

Neue Themen


Oben