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:
Klasse Oberfläche:
Klasse Fifteen:
Klasse GUI:
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
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();
}
}
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