Hallo,
vor einigen Tagen habe ich Java für mich entdeckt und nach ein paar Tutorials wollte ich mich selber an das programmieren von Java-Programmen machen. Nun habe ich mich für ein Schere, Stein, Papier Spiel entschieden und möchte dies in Eclipse programmieren.
Dazu habe ich 3 Klassen erstellt, die folgendes machen sollen:
-SchereSteinPapier: Die Hauptklasse die die anderen Klassen "ins Leben ruft".
-StartFenster: Die Klasse, in der das Fenster definiert ist.
-actionLauscher: Der Klasse, die auf z.b. Knopfdrücke vom StartFenster reagiert und Methoden aufruft.
Hier der Code der SchereSteinPapier Klasse:
Hier der Code der actionLauscher Klasse:
Hier der Code der StartFenster Klasse:
Wenn nun der "Schere" Knopf gedrückt wird, wird der actionLaucher aktiv und ruft eine Methode in der Hauptklasse auf. In dieser Methode wird wiederum eine Methode in der StartFenster Klasse aufgerufen. Diese Methode soll dann den Inhalt des ergebnisPLAYER Textfields ändern aber immer wenn ich den Knopf drücke bekomme ich folgende Fehlermeldungen:
Die Methode wird aufgerufen aber das Problem scheint bei der Änderung des Textfields zu liegen. ;(
Ich habe jetzt sicher schon 3 Nachmittage in Foren nach Lösungen gesucht und bin zu keiner gekommen die mir weiter geholfen hat. Das Programm ist nur soweit geschrieben, dass das Fenster erzeugt wird und das was beim Schere Knopf passiert, also noch lange nicht fertig.
Da ich Anfänger bin hoffe ich ihr könnt mir helfen und mir die Lösung erklären
MFG Hinosupe
vor einigen Tagen habe ich Java für mich entdeckt und nach ein paar Tutorials wollte ich mich selber an das programmieren von Java-Programmen machen. Nun habe ich mich für ein Schere, Stein, Papier Spiel entschieden und möchte dies in Eclipse programmieren.
Dazu habe ich 3 Klassen erstellt, die folgendes machen sollen:
-SchereSteinPapier: Die Hauptklasse die die anderen Klassen "ins Leben ruft".
-StartFenster: Die Klasse, in der das Fenster definiert ist.
-actionLauscher: Der Klasse, die auf z.b. Knopfdrücke vom StartFenster reagiert und Methoden aufruft.
Hier der Code der SchereSteinPapier Klasse:
Java:
package de.SchereSteinPapier.game;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class SchereSteinPapier extends JFrame {
StartFenster hauptfenster = new StartFenster();
private static final long serialVersionUID = 1L;
public static void main(String[] args) throws Exception {
StartFenster hauptfenster = new StartFenster();
hauptfenster.startFenstergenerieren();
hauptfenster.setAlwaysOnTop(true);
hauptfenster.setBackground(null);
}
public void schereGedrückt() {
hauptfenster.setergebnisPLAYER("Schere");
}
public void steinGedrückt() {
}
public void papierGedrückt() {
}
}
Hier der Code der actionLauscher Klasse:
Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import de.SchereSteinPapier.game.StartFenster.spielzüge;
public class actionLauscher implements ActionListener{
StartFenster hauptfenster = new StartFenster();
SchereSteinPapier programm = new SchereSteinPapier();
String userWahl;
public void actionPerformed(ActionEvent evt) {
if (evt.getActionCommand() == spielzüge.SCHERE.name()) {
System.out.println("Schere");
userWahl = "Schere";
programm.schereGedrückt();
} else if (evt.getActionCommand() == spielzüge.STEIN.name()) {
System.out.println("Stein");
userWahl = "Stein";
} else if (evt.getActionCommand() == spielzüge.PAPIER.name()) {
System.out.println("Papier");
userWahl = "Papier";
}
}
}
Hier der Code der StartFenster Klasse:
Java:
package de.SchereSteinPapier.game;
import java.awt.Font;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class StartFenster extends JFrame {
public enum spielzüge {
SCHERE,
STEIN,
PAPIER
}
String ergebnisPLAYER = "Start";
String ergebnisCPU = "Start";
JLabel ueberschrift;
JLabel VS;
JLabel playername;
JLabel Computer;
JTextField eergebnisCPU;
JTextField eergebnisPLAYER;
JButton schereKnopf;
JButton steinKnopf;
JButton papierKnopf;
Font schriftart = new Font("Impact", Font.PLAIN, 50);
Font schriftartKnopf = new Font("Arial", Font.BOLD, 30);
Font schriftartName = new Font("Arial", Font.BOLD, 40);
public void startFenstergenerieren() throws Exception {
setLayout(null);
setVisible(true);
setSize(1000, 600);
setTitle("SchereSteinPapier");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ueberschrift = new JLabel("Schere, Stein, Papier");
ueberschrift.setBounds(300, 30, 500, 50);
ueberschrift.setFont(schriftart);
add(ueberschrift);
VS = new JLabel("VS");
VS.setBounds(500, 100, 200, 50);
VS.setFont(schriftartKnopf);
add(VS);
Computer = new JLabel("COMPUTER");
Computer.setBounds(130, 100, 400, 50);
Computer.setFont(schriftartName);
add(Computer);
playername = new JLabel("SPIELER");
playername.setBounds(700, 100, 400, 60);
playername.setFont(schriftartName);
add(playername);
schereKnopf = new JButton("Schere");
schereKnopf.setBounds(700, 200, 200, 50);
schereKnopf.setFont(schriftartKnopf);
schereKnopf.setActionCommand(spielzüge.SCHERE.name());
schereKnopf.addActionListener(new actionLauscher());
add(schereKnopf);
steinKnopf = new JButton("Stein");
steinKnopf.setBounds(700, 260, 200, 50);
steinKnopf.setFont(schriftartKnopf);
steinKnopf.setActionCommand(spielzüge.STEIN.name());
steinKnopf.addActionListener(new actionLauscher());
add(steinKnopf);
papierKnopf = new JButton("Papier");
papierKnopf.setBounds(700, 320, 200, 50);
papierKnopf.setFont(schriftartKnopf);
papierKnopf.setActionCommand(spielzüge.PAPIER.name());
papierKnopf.addActionListener(new actionLauscher());
add(papierKnopf);
eergebnisPLAYER = new JTextField (ergebnisPLAYER);
eergebnisPLAYER.setEditable(false);
eergebnisPLAYER.setBounds(530, 270, 100, 40);
add(eergebnisPLAYER);
eergebnisCPU = new JTextField (ergebnisCPU);
eergebnisCPU.setEditable(false);
eergebnisCPU.setBounds(400, 270, 100, 40);
add(eergebnisCPU);
}
public void setergebnisPLAYER(String ergebnisSPIELER){
eergebnisPLAYER.setText(ergebnisSPIELER);
}
}
Wenn nun der "Schere" Knopf gedrückt wird, wird der actionLaucher aktiv und ruft eine Methode in der Hauptklasse auf. In dieser Methode wird wiederum eine Methode in der StartFenster Klasse aufgerufen. Diese Methode soll dann den Inhalt des ergebnisPLAYER Textfields ändern aber immer wenn ich den Knopf drücke bekomme ich folgende Fehlermeldungen:
Java:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at de.SchereSteinPapier.game.StartFenster.setergebnisPLAYER(StartFenster.java:99)
at de.SchereSteinPapier.game.SchereSteinPapier.schereGedrückt(SchereSteinPapier.java:23)
at de.SchereSteinPapier.game.actionLauscher.actionPerformed(actionLauscher.java:19)
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$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$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)
Die Methode wird aufgerufen aber das Problem scheint bei der Änderung des Textfields zu liegen. ;(
Ich habe jetzt sicher schon 3 Nachmittage in Foren nach Lösungen gesucht und bin zu keiner gekommen die mir weiter geholfen hat. Das Programm ist nur soweit geschrieben, dass das Fenster erzeugt wird und das was beim Schere Knopf passiert, also noch lange nicht fertig.
Da ich Anfänger bin hoffe ich ihr könnt mir helfen und mir die Lösung erklären
MFG Hinosupe