Null Pointer Exception bei Focus Event bei einem JTextField

Lit-Web

Aktives Mitglied
Hallo Leute,

ich glaube ich habe eine Ahnung wo der Fehler her rührt, aber wie ich es anders lösen kann will mir grad keine Idee in den Kopf.

Ich will bei einer Loginkontrolle folgendes erreichen, wenn nach der Eingabe des Passworts das Feld verlassen wird soll der Button zum Login erscheinen.

Ich bekomme folgende Exception geworfen wenn der Event ausgelöst wurde.

Code:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at TextFieldFocusAction.focusLost(TextFieldFocusAction.java:29)
	at java.awt.AWTEventMulticaster.focusLost(Unknown Source)
	at java.awt.Component.processFocusEvent(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.KeyboardFocusManager.redispatchEvent(Unknown Source)
	at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(Unknown Source)
	at java.awt.DefaultKeyboardFocusManager.dispatchEvent(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.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)

Hier meine GUI.
Java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;

public class LoginGuiElement extends JPanel {
	
	protected JLabel lblLogName;
	protected JLabel lblPwd;
	protected GridBagLayout pnlLoginLayout;
	protected JTextField loginNameField;
	protected JTextField loginPwdField;
	protected JButton loginButton;
	protected ArrayList<String> fieldValues;
	
	/**
	 * 
	 * Konstruktor gibt das fertige Panel mit allen Loginelementen zurück
	 * 
	 * */
	public LoginGuiElement () {
		this.setSize( 500, 500 );
		this.setLayout( this.createLogPanelLayout() );
		this.setPreferredSize( new Dimension( 500, 150 ) );
		this.setBackground( Color.white );
		this.setVisible( true );
		this.add( this.returnLblLogName() );
		this.add( this.returnLblPwd() );
		this.add( this.returnNameField() );
		this.add( this.returnPwdField() );
		this.add( this.returnBtnLogin() );
		fieldValues = new ArrayList<String>();
		fieldValues.add( this.returnNameField().getText() );
		fieldValues.add( this.returnPwdField().getText() );
	}
	
	/**
	 * 
	 * Label Loginname
	 * 
	 * */
	protected JLabel returnLblLogName () {
		lblLogName = new JLabel();
		Font f = new Font( "Arial", Font.BOLD, 12 );
		lblLogName.setText( "Loginname" );
		lblLogName.setSize( 120, 20 );
		lblLogName.setFont( f );
		lblLogName.setForeground( Color.black );
		lblLogName.setLocation( 10, 40 );
		lblLogName.setVisible( true );
		GridBagConstraints gbc = new GridBagConstraints();
		gbc.gridx = 0;
		gbc.gridy = 0;
		gbc.gridwidth = 1;
		gbc.gridheight = 1;
		gbc.weightx = 100;
		gbc.weighty = 20;
		pnlLoginLayout.setConstraints( lblLogName, gbc );
		return lblLogName;
	}
	
	/**
	 * 
	 * Label Passwortext
	 * 
	 * */
	protected JLabel returnLblPwd () {
		lblPwd = new JLabel();
		Font f = new Font( "Arial", Font.BOLD, 12 );
		lblPwd.setText( "Passwort" );
		lblPwd.setSize( 120, 20 );
		lblPwd.setFont( f );
		lblPwd.setForeground( Color.black );
		lblPwd.setLocation( 10, 40 );
		lblPwd.setVisible( true );
		GridBagConstraints gbc = new GridBagConstraints();
		gbc.gridx = 0;
		gbc.gridy = 1;
		gbc.gridwidth = 1;
		gbc.gridheight = 1;
		gbc.weightx = 100;
		gbc.weighty = 20;
		pnlLoginLayout.setConstraints( lblPwd, gbc );
		return lblPwd;
	}
	
	/**
	 * 
	 * Eingabefeld für den Loginnamen
	 * 
	 * */
	protected JTextField returnNameField () {
		loginNameField = new JTextField();
		loginNameField.setPreferredSize( new Dimension( 120, 20 ) );
		loginNameField.setVisible( true );
		GridBagConstraints gbc = new GridBagConstraints();
		gbc.gridx = 1;
		gbc.gridy = 0;
		gbc.gridwidth = 1;
		gbc.gridheight = 1;
		gbc.weightx = 120;
		gbc.weighty = 20;
		pnlLoginLayout.setConstraints( loginNameField, gbc );
		return loginNameField;
	}
	
	/**
	 * 
	 * Eingabefeld für die Passworteingabe
	 * von hier aus soll der Focus Event ausgelöst werden wenn der Focus des Feldes verlassen wird
	 * 
	 * */
	protected JTextField returnPwdField () {
		loginPwdField = new JTextField();
		loginPwdField.setPreferredSize( new Dimension( 120, 20 ) );
		loginPwdField.addFocusListener( new TextFieldFocusAction( fieldValues ,loginButton ) );
		loginPwdField.setVisible( true );
		GridBagConstraints gbc = new GridBagConstraints();
		gbc.gridx = 1;
		gbc.gridy = 1;
		gbc.gridwidth = 1;
		gbc.gridheight = 1;
		gbc.weightx = 120;
		gbc.weighty = 20;
		pnlLoginLayout.setConstraints( loginPwdField, gbc );
		return loginPwdField;
	}
		
	/**
	 * 
	 * Login Button der einen Event feuert um sich ins System einzuloggen
	 * 
	 * */
	protected JButton returnBtnLogin () {
		loginButton = new JButton();
		loginButton.setPreferredSize( new Dimension( 120, 20 ) );
		loginButton.setText( "Login" );
		loginButton.setVisible( false );
		GridBagConstraints gbc = new GridBagConstraints();
		gbc.gridx = 1;
		gbc.gridy = 2;
		gbc.gridwidth = 1;
		gbc.gridheight = 1;
		gbc.weightx = 120;
		gbc.weighty = 20;
		pnlLoginLayout.setConstraints( loginButton, gbc );
		return loginButton;
	}
	
	/**
	 * 
	 * Layoutmanger wird ans Panel übergeben
	 * 
	 * */
	protected GridBagLayout createLogPanelLayout () {
		pnlLoginLayout = new GridBagLayout();
		return pnlLoginLayout;
	}
}

Und hier meine ausgelagerte Focus Action
Java:
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.util.ArrayList;
import javax.swing.*;

public class TextFieldFocusAction implements FocusListener {
	
	protected JButton btnLogin;
	protected ArrayList<String> values;
	
	public TextFieldFocusAction ( ArrayList<String> pFieldValues, JButton pBtnLogin ) {
		values = new ArrayList<String>();
		values = pFieldValues;
		btnLogin = pBtnLogin;
	}
	
	public void focusLost ( FocusEvent txtFocusEvent ) {
		
		if ( !values.get(0).equals("") && !values.get(1).equals("") ) {
			btnLogin.setVisible( true );
		}
	}
	
	public void focusGained ( FocusEvent pFocusEvent ) {
		
	}
}

Ich habe nun gesucht und gesucht, aber wirklich etwas finden was auf das Problem zutrifft konnte ich nicht. Ich vermute das der Fehler in GUI Klasse in Zeile 116 der Auslöser ist. Wie kann ich das anders machen?

Vielen Dank für Hilfe und Antwort.

Mfg Lit-Web
 
S

SlaterB

Gast
tja, deine Nennung der Zeil 116 lässt vermuten dass du erkannt hast, dass dort der übergebene Button noch null ist
auch wenn es noch schlauer klänge, wenn du das direkt gesagt hättest

- du könntest auf eine richtige Initialisierungsreihenfolge achten, die Methode returnBtnLogin() vor returnPwdField() aufrufen,
aber das ist nur eine temporäre Heilung, Fehler sind weiter möglich
- du könntest die Variablen gleich mit [c]JButton loginButton = new JButton();[/c]
initialisieren, dann hast du aber Probleme, diese später noch richtig zu initialisieren, wird auch nicht schön,
- falls du den zuletzt genannten Weg nicht gehst solltest du dir gleich für das komplette Programm merken: nie auf die Instanzattribute direkt zugreifen, nur über die Methoden,
und diese dann nach dem Schema bauen
Java:
getButtonX() {
if (this.x != null) { return this.x; }
this.x = ..;
..
}
ganz sicher muss das auch nicht unbedingt sein, etwa wenn getButtonX() getButtonY() benötigt und y wieder x
 

Peter W. Marth

Aktives Mitglied
Hallo,

weil loginButton erst in Zeile 31 von LoginGuiElement initialisiert wird (indirekt über returnBtnLogin()), ist die Variable in der zuvor in Zeile 30 aufgerufenen Methode returnPwdField() natürlich noch null.
Schnelle Lösung: Zeile 30 und 31 vertauschen
Saubere Lösung: Lazy initialization - Wikipedia, the free encyclopedia bei den returnBtn/PwdField/usw()-Methoden einsetzen und dann
Java:
loginPwdField.addFocusListener( new TextFieldFocusAction( fieldValues ,returnBtnLogin() ) );
statt
Java:
loginPwdField.addFocusListener( new TextFieldFocusAction( fieldValues ,loginButton ) );
verwenden.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
W Null-Pointer Exception beim Programmstart Java Basics - Anfänger-Themen 8
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
C Null Pointer Exception Java Basics - Anfänger-Themen 10
G Null Pointer Exception Java Basics - Anfänger-Themen 4
D OOP Warum bekomme ich eine Null-Pointer Exception!!? :( Java Basics - Anfänger-Themen 4
A Null Pointer Exception in Liste Java Basics - Anfänger-Themen 11
L Null Pointer Exception bei setText Java Basics - Anfänger-Themen 9
T Null Pointer Exception Java Basics - Anfänger-Themen 4
T Null Pointer Exception Java Basics - Anfänger-Themen 8
H Null Pointer Exception Problem Java Basics - Anfänger-Themen 3
D Null-Pointer-Exception Java Basics - Anfänger-Themen 5
E Hash Map - Null Pointer Exception? Java Basics - Anfänger-Themen 3
B Call By reference (Null pointer exception) Java Basics - Anfänger-Themen 6
J Null Pointer Exception in der "ob Null"-Abfrage? Java Basics - Anfänger-Themen 37
B Null Pointer Exception Java Basics - Anfänger-Themen 7
A Null Pointer Exception beim Erstellen eines Arrays aus einer eigenen Klasse Java Basics - Anfänger-Themen 3
K Null pointer exception in Methode Java Basics - Anfänger-Themen 4
D Null Pointer Exception Java Basics - Anfänger-Themen 8
D null pointer exception Java Basics - Anfänger-Themen 3
M Null Pointer Exception Java Basics - Anfänger-Themen 18
T Null Pointer Exception Java Basics - Anfänger-Themen 2
F Null Pointer Exception #2 Java Basics - Anfänger-Themen 5
I Unerklärliche Null-Pointer-Exception bei JRadioButton Array Java Basics - Anfänger-Themen 2
H Null Pointer Exception? Java Basics - Anfänger-Themen 4
G Null Pointer Exception Java Basics - Anfänger-Themen 10
N null pointer exception Java Basics - Anfänger-Themen 6
S Null-Pointer-Exception Java Basics - Anfänger-Themen 5
B Null Pointer Exception Java Basics - Anfänger-Themen 2
L nur kleines null Pointer Exception problem Java Basics - Anfänger-Themen 9
R Null Pointer Exception von anderer Klasse aus. Java Basics - Anfänger-Themen 2
N NULL Pointer Exception Java Basics - Anfänger-Themen 4
J Java.lang Null Pointer Exception Java Basics - Anfänger-Themen 3
Dilandau null pointer exception - woran liegts? Java Basics - Anfänger-Themen 16
W Null-Pointer trotz Konstruktor? Java Basics - Anfänger-Themen 9
Orkanson Null Pointer Expception Java Basics - Anfänger-Themen 3
G Null Pointer Exeption Java Basics - Anfänger-Themen 8
Z Null Pointer?! WHY? Java Basics - Anfänger-Themen 11
J Null-Pointer -> Code-Zeile ausgeben möglich? Java Basics - Anfänger-Themen 7
N null pointer exeption problem Java Basics - Anfänger-Themen 4
H Null pointer Exeption Java Basics - Anfänger-Themen 4
R Thread geht jetzt - aber - Fehler "Null-Pointer" Java Basics - Anfänger-Themen 20
S Vector wirdn icht gefüllt, null Pointer, was ist der Fehler Java Basics - Anfänger-Themen 6
T Ich brauche eine Schleife die eine beliebige Zahl so lange durch 10 teilt bis zur Null Java Basics - Anfänger-Themen 5
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1
J 2 listen vergleichen, die auch null Elemente haben können ! Java Basics - Anfänger-Themen 9
I Grundsatzfrage: Belegt eine Referenz auf 'null' RAM, und wenn ja - wieviel ;-) ? Java Basics - Anfänger-Themen 5
H Ein übergegebenes Objekt auf null setzen Java Basics - Anfänger-Themen 9
P Buffer und null Java Basics - Anfänger-Themen 3
"java.util.HashMap.get(Object)" is null Java Basics - Anfänger-Themen 10
jakobfritzz Array- cannot invoke "" because "" is null Java Basics - Anfänger-Themen 4
W Wie ziehe ich von einer bestimmten Zahl, Zahlen ab, bis mein Ergebnis null beträgt? Java Basics - Anfänger-Themen 10
N null in String replacen Java Basics - Anfänger-Themen 16
S JavaKara Null Exception Error Java Basics - Anfänger-Themen 4
K Bufread.readLine())!= null wie beenden? Java Basics - Anfänger-Themen 4
C Variablen Provided text for message may not be null Java Basics - Anfänger-Themen 9
T ComboBox getValue() zeigt null Java Basics - Anfänger-Themen 7
J null exception Array Java Basics - Anfänger-Themen 5
tobikoch String x= null Bedeutung Java Basics - Anfänger-Themen 9
C NumberFormatException: null ohne Ausnahmebehandlung stoppen Java Basics - Anfänger-Themen 7
J Int wird als Null ausgegeben Java Basics - Anfänger-Themen 8
M Prüfen auf null ohne NPE Java Basics - Anfänger-Themen 1
C Array-Eintrag wieder auf Null setzen Java Basics - Anfänger-Themen 3
C Array auf Null-Inhalte prüfen Java Basics - Anfänger-Themen 9
V NullPointerException, wenn Key und Value null sind Java Basics - Anfänger-Themen 2
M jTable bekommt null Java Basics - Anfänger-Themen 1
B MySQL (jdbc) -> connection liefert NULL Java Basics - Anfänger-Themen 3
der_Schokomuffin Hilfe gesucht: String wird auf null gesetzt! Java Basics - Anfänger-Themen 17
L Warum ist Variable null? Java Basics - Anfänger-Themen 3
J javax.servlet.ServletException: Name is null Java Basics - Anfänger-Themen 7
B if(object== null) abkürzen? Java Basics - Anfänger-Themen 6
O JavaArray Null Java Basics - Anfänger-Themen 3
U Null Exception aber keine Ahnung warum Java Basics - Anfänger-Themen 5
W NullPointerException obwohl nicht null? Java Basics - Anfänger-Themen 3
D Best Practice Konvention - Klassenmembers auf null setzen? Java Basics - Anfänger-Themen 2
I Null-Überprüfung durch Lambda-Expressions abkürzen Java Basics - Anfänger-Themen 8
M set Integer bzw. set null mit SQL DB Java Basics - Anfänger-Themen 9
I Polymorphie Null Objekt Java Basics - Anfänger-Themen 3
O Datentypen Integer mit führender Null Java Basics - Anfänger-Themen 13
DaCrazyJavaExpert Compiler-Fehler Variable nicht mit null initialisiert, trotzdem: NullPointerException Java Basics - Anfänger-Themen 28
J Einfache Frage zu "null" Java Basics - Anfänger-Themen 2
T Datei in Array einlesen "null" Java Basics - Anfänger-Themen 8
P Operatoren Parameter nicht auf null geprüft? Java Basics - Anfänger-Themen 16
K Operatoren 2D Int Array auf Null-Referenzen prüfen Java Basics - Anfänger-Themen 18
V Elemente aus einem Array mit null überschreiben Java Basics - Anfänger-Themen 4
V String Array gegen null-Eintrag sichern Java Basics - Anfänger-Themen 11
R Gleitkommazahlen ohne führende Null Java Basics - Anfänger-Themen 10
M array = null Java Basics - Anfänger-Themen 2
F String equals NULL Problem Java Basics - Anfänger-Themen 4
F JSON null macht mir ein Problem Java Basics - Anfänger-Themen 3
R Property Value als null setzen Java Basics - Anfänger-Themen 1
D Arrays.toString spuckt null aus? Java Basics - Anfänger-Themen 3
T Compiler-Fehler Null type safety (type annotations) Java Basics - Anfänger-Themen 5
F Erste Schritte Unterschied: Array "leer" / "null" Java Basics - Anfänger-Themen 3
J Fehlerhafte Ausgabe "null" Java Basics - Anfänger-Themen 2
G Threads zum Thema Threads??? null Ahnung Java Basics - Anfänger-Themen 4
W Input/Output DataOutputStream gibt NULL zurück Java Basics - Anfänger-Themen 5
J Einfach verkettet List: Ausgabe ohne null Java Basics - Anfänger-Themen 11
D Null Ausgabe obwohl wert zugewiesen Java Basics - Anfänger-Themen 5
J Alias null Java Basics - Anfänger-Themen 4
B Aliasing bei null-Objekten Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben