Eclipse JTextFIeld lässt sich nicht ändern!

H

Hinosupe

Mitglied
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:


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
 
G

Gucky

Top Contributor
Das ist die längste NPE, die ich je gesehen habe :D
Du hast in Zeile 99 eine Zeile, in der du versuchst auf eine nicht definierte Zeile zuzugreifen.

Java:
void fehler(){
  Test a;
  a.tuWas(); //NullPointerException
}

void läuft(){
  Test a = new Test();
  a.tuWas();//läuft
}
 
H

Hinosupe

Mitglied
Vielen dank für die schnelle Antwort. :)

Nun habe ich ein weiteres Problem: Wie update ich das Textfeld dann? Der Inhalt des Textfeldes auf der GUI bleibt immernoch auf "Start". :(
 
G

Gucky

Top Contributor
NameDesTextfeldes.setText(einString);

ich sehe nicht einmal eine Variable ergebnisSPIELER.
 
H

Hinosupe

Mitglied
also ich habe jetzt in der Klasse StartFenster den Code:

Java:
JTextField eergebnisPLAYER;
zu
Java:
JTextField eergebnisPLAYER = new JTextField();
geändert und das Problem mit der NPE war gelöst.


Die Variable "ergebnisSPIELER" wir doch dadurch definiert, dass die Methode:
Java:
public void setergebnisPLAYER(String ergebnisSPIELER){
		
		eergebnisPLAYER.setText(ergebnisSPIELER);
		
	}
einen String übergeben bekommt namens "ergebnisSPIELER" und dieser dann in das Textfeld reingeschrieben werden soll. Doch irgendwie will sich der Text im Feld nicht ändern.
 
G

Gucky

Top Contributor
Lass dir mal den übergebenen String ausgeben oder debug mal an der Stelle und guck nach, ob der String überhaupt ankommt.
 
H

Hinosupe

Mitglied
Also mit System.out.println(ergebnisSPIELER) lässt sich der String problemlos ausgeben nur den Sting in das Textfield zu schreiben funktioniert nicht. :(
 
H

Hinosupe

Mitglied
Wie ich ganz oben schon geschrieben habe bin ich neu in Java und weiß nicht was ein "Thread" ist oder wie man nachschaut wo das Programm läuft
 
G

Gucky

Top Contributor
Dann wird es wohl nicht so sein. :D Den braucht man für Nebenläufigkeit. ;)

Versuch mal einen anderen String hineinzuschreiben. Auch an anderer Stelle.
 
H

Hinosupe

Mitglied
Hab ich verwucht - hat auch nichts gebracht :(
Ich habe echt keine Idee wo der Fehle lirgt. Gibt es vielleicht eine Art Befehl der das Textafield erneuert also refresht oder etwas in der Art?
 
G

Gucky

Top Contributor
Ich muss gestehen, dass ich mit meinem Latein am Ende bin. Jetzt hilft nur noch der Debugger. Führ den Code mal zeilenweise aus und guck dir die Belegungen der Variablen an.
 
H

Hinosupe

Mitglied
Okay werde ich mache. Nochmals vielen Dank für deine Hilfsbereitschaft :)
Ich werde mich melden sobald ich den Fehler gefunden habe.

MFG Hinosupe
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Z NetBeans JTextfield Properties IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 2
NeoLexx Externe eingefügte JAR lässt sich nicht importieren IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 4
J Inteelij lässt keine Eingaben zu IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 2
H Jar Datei lässt sich nicht starten. IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 15
X Plugin lässt sich nicht einbinden.. IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 0
B IDEA IntelliJ JDK wird nicht erkannt und lässt sich nicht einbinden IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 2
E Eclipse CVS Password lässt sich nicht ändern IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 8
Ä Schließen des Projekts lässt alle .java Files offen ? IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 7
B Eclipse lässt sich nicht öffnen IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 31
K Programm lässt sich nicht ausführen IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 11
A BlueJ lässt mich gar nichts machen, ausser Projekt erstellen IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 7
H Eclipse Sipmles Plug-in laesst sich nicht starten -> window.getShell() IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 2
G NetBeans Netbeans 8.2 hängt sich auf IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 15
C Eclipse Eclipse - WindowBuilder hängt sich auf (Keine Rückmeldung) IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 1
I IntelliJhat sich seltsam verändert IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 1
E Kennt sich jemand mit dem Messinstrument "pgbench" aus oder hat nützliche Links dazu? IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 1
M Java installiert sich falsch. IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 5
O Eclipse Pfad zur Java-Source ändert sich automatisch IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 4
I Eclipse Javadocs lassen sich nicht neu generieren IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 4
denjae Jigloo hängt sich auf IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 3
S Eclipse: Nach Absturz lassen sich keine Dateien mehr öffnen IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 3
S Was hat es mit dem src auf sich IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 8
S JasperReports Viewer öffnet sich nicht IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 3
S Netbeans, Sun Studio Creator 2, lassen sich nicht installier IDEs - Eclipse, IntelliJ IDEA, BlueJ & mehr 7

Ähnliche Java Themen

Anzeige


Oben