Daten in Instanz einer Klasse ändern / abfragen

bifidus

Mitglied
Ich habe mit untenstehendem Code ein Problem. Das Login funktioniert einwandfrei. Wenn ich dann jedoch "abmelden" brauche, gibts ein Problem. "Abmelden" ist noch nicht ausprogrammiert, jedoch habe ich in einem ersten Schritt eine Abfrage der momentanen Userdaten programmiert. Die in "Login" in "cc" und "su" gespeicherten Daten sind nicht mehr vorhanden. Woran liegt das?


Java:
package svaControl;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import model.SVAUser;
import svaView.SVAMainFrame;

public class ActionController implements ActionListener {
	
	/* JFrame als Hauptfenster */
	static SVAMainFrame mf;
	
	/* ConnectionController fuer Datenbankverbindungen */ 
	private ConnectionController cc = new ConnectionController("","");
	private SVAUser su;
		
	public void actionPerformed(ActionEvent e) {

		/* Login Button oder Enter im Passwortfeld */
		if(e.getActionCommand().equals("login")){
			/* Username und Passwort setzen und Connection zur DB herstellen*/
			su = new SVAUser(mf.getUser(),mf.getPw());
			cc.setUser(mf.getUser());
			cc.setPw(mf.getPw());			
			if(cc.makeConnection()!=null){
				System.out.println("LOGIN OK");				
				mf.loginPassed();				
			}
			else{
				System.out.println("LOGIN FEHLGESCHLAGEN - Username und/oder Passwort falsch!");
				mf.loginError();
			}
			System.out.println("**********");
			System.out.println(cc.getUser());
			System.out.println("**********");
			System.out.println("**********");
			System.out.println(su.getUser());
			System.out.println("**********");
			System.out.println(su.getPw());
		}

/* Menuleiste 'Abmelden' wurde gewaehlt */
		if(e.getActionCommand().equals("abmelden")){			;					
			System.out.println("User wird abgemeldet!");
			System.out.println(cc.getUser());
			System.out.println("-------------");
			System.out.println(su.getUser());
			System.out.println("--------------");
			System.out.println(su.getPw());
		}
		
		/* Reset Button im Loginpanel*/
		if(e.getActionCommand().equals("reset")){ 
			mf.resetLogin();
		}
	}
	
	public String getUser(){
		return cc.getUser();
	}
	
	public static void main(String[] args){
		mf = new SVAMainFrame();
		mf.createJFrame();
	}

}


Hier die Klasse SVAUser:

Java:
package model;

public class SVAUser {
	
	private String user;
	private String password;
	
	public SVAUser(String u, String pw){
		this.user = u;
		this.password = pw;		
	}
	
	public String getUser(){
		return user;
	}
	
	public String getPw(){
		return password;
	}

}
 

bifidus

Mitglied
Das ist das Hauptfenster, also die View. Dort passiert nichts grosses. Zu beginn ein Textfeld und ein Passwortfeld für das Login. Diese Daten werden ohne Probleme im übernommen.

Java:
package svaView;

import info.clearthought.layout.TableLayout;

import java.awt.Container;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
import javax.swing.UIManager;

import model.CreateMenu;
import model.HelperTools;
import svaControl.ActionController;


public class SVAMainFrame extends JFrame {	
	
	
	private static final long serialVersionUID = -67353733322067411L;
	private Container contentPane;
	HelperTools ht = new HelperTools();
	private JFrame jf;
	Login login = new Login();
	ActionController ac = new ActionController();

	public SVAMainFrame(){	
		contentPane = getContentPane();
		/*
		 *  LookAndFeel setzen 
		 */		
		try {			
			UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); 
			JFrame.setDefaultLookAndFeelDecorated(true);
		}
	    catch (final Exception e){	    	
	    	System.out.println(e);
	    	}    
	}
	
	public void createJFrame(){				
		/*
		 * Matrix für das TableLayout (für Hauptpanel)
		 */
		double tlSize[][] = {{0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1},{0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1}};
		contentPane = getContentPane();		
		/*
		 * HelperTools Object für die Ermittlung der Bildschirmauflösung
		 * Daraus ergibt sich die Fenstergrösse (Höhe - 35px wegen Statuszeile)
		 */		
		int screenwidth = ht.getSizeX();
		int screenheight = ht.getSizeY();
			
		/*
		 * JFrame erstellen mit Breite und Höhe
		 * Titel=SVA 1.5
		 */		
		jf = new JFrame();
		jf.setContentPane(contentPane);
		/*
		 * Layout auf dem Content Pane bestimmen
		 * (Table Layout)
		 */
		contentPane.setLayout(new TableLayout(tlSize));
		
		jf.setTitle("SVA 1.5");
		jf.setSize(screenwidth-10,screenheight-40);
		jf.setLocation(0,0);
		jf.addWindowListener(new WindowAdapter(){
			public void windowClosing(final WindowEvent evWindow)
			{System.exit(1);}		
			});			
		
		/* Menu erstellen */
		CreateMenu cm = new CreateMenu();
		cm.setMenu();
		jf.setJMenuBar(cm);
		
		/* Loginmaske erstellen */		
		login.makeLogin();		
		
		contentPane.add(login,"3,3,4,3,c,c");
				
		jf.setVisible(true);		
	}
	
	public void makeLogin(){
		contentPane.removeAll();		
		login.makeLogin();
		login.validate();
		contentPane.add(login,"3,3,4,3,c,c");
		jf.validate();		
		jf.repaint();
	}
	
	public void resetLogin(){		
		login.username.setText("");
		login.password.setText("");
		login.validate();
		jf.validate();
	}
	
	public void loginError(){
		login.username.setText("");
		login.password.setText("");
		login.failedLogin();
		login.validate();
		jf.validate();
	}
	
	public void loginPassed(){		
			
		login.loginOK();		
		contentPane.add(login,"3,3,5,5,c,c");					
		jf.validate();
		jf.repaint();		
	}
	
	public String getUser(){
		return (login.username.getText());
	}
		
	public String getPw(){
		return String.valueOf(login.password.getPassword());
	}
}
 

bifidus

Mitglied
Hier noch die Exception nachgeliefert:

xception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at svaControl.ActionController.actionPerformed(ActionController.java:39)
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.AbstractButton.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.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.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 Codezeile, die das verursacht:
System.out.println(su.getUser());
 

Suinos

Bekanntes Mitglied
Das Problem liegt ja daran, dass
Code:
su null
ist, du aber versuchst darauf eine Methode aufzurufen.
Die Variable
Code:
su
referenziert nur dann ein Objekt, wenn der erste if-Zweig ausgeführt wird:
Java:
/* Login Button oder Enter im Passwortfeld */
if(e.getActionCommand().equals("login")){
      /* Username und Passwort setzen und Connection zur DB herstellen*/
      su = new SVAUser(mf.getUser(),mf.getPw());
      // [...]
}

Falls aber zuerst der andere Zweig ausgeführt wird, wird die
Code:
NullPointerException
geworfen.

Ich würde also als schnelle Lösung vorschlagen, dass du eine Abfrage im 'Abmelden'-Zweig machst, in welchem du prüfst, ob überhaupt ein Benutzer angemeldet ist.
So sollte die Logik erstmals funktionieren.

Damit die Anwendung nachher aber auch Sinn macht, solltest du sicherstellen, dass der 'Abmelden'-Zweig erst nach einem Login ausgeführt werden kann, zum Beispiel durch das sperren des Abmelden-Knopfes (oder wie auch immer du das machst), solange kein Benutzer angemeldet ist.

--

bifidus hat gesagt.:
Die in "Login" in "cc" und "su" gespeicherten Daten sind nicht mehr vorhanden.
Meinst du damit das gleiche Problem, oder ist es noch ein bestehendes?
 

bifidus

Mitglied
Danke für deine Antwort.

Aber daran kann es nicht liegen. Ich starte das Programm und logge mich ein (Login wird ausgeführt). Doch beim "Abmelden" sind die
User und Password nicht mehr in
Code:
su
und
Code:
cc
.

Direkt nach dem ausführen der entsprechenden Methode für das Login im ActionController sind die entsprechenden Variablen in der Instanz
Code:
su
und
Code:
cc
korrekt gesetzt (Abfrage mit System.out.prin

Das von dir angesprochene Problem gehört zum gleichen Problem.
 

Suinos

Bekanntes Mitglied
bifidus hat gesagt.:
Doch beim "Abmelden" sind die
User und Password nicht mehr in
Code:
su
und
Code:
cc
.
Wie meinst du das?
Zeigen die Variablen auf
Code:
null
oder geben die Methoden falsche (leere) Werte zurück?

In beiden Fällen scheint es mir, dass Quellcode fehlt. Du hast wahrscheinlich nicht alles gepostet?

Falls es
Code:
null
ist, werden die Variablen irgendwo darauf gesetzt (also
Code:
su = null;
), und da sie beide
Code:
private
sind kann dies nur in dieser Klasse passieren.

Falls es falsche Werte sind (und du dir sicher bist, dass die richtigen vorher drin standen), referenzieren entweder die Variablen auf andere Objekte (also
Code:
su = [SVAUser];
), oder es stehen in diesen Klassen Methoden zur Verfügung, mit welchen die Werte geändert werden können.


Also:
Code:
null
oder falsche Werte?
 

Michael...

Top Contributor
Würde sagen, dass bei dem vielen - optimierungsfähigen ;-) - Code, der entscheidende Teil fehlt.
Ich sehen nirgends wo eine Instanz von ActionController verwendet/ zugewiesen wird.
Meine Vermutung ist, Du erzeugst unterschiedliche Instanzen von ActionController für's an- und abmelden, dadurch ist beim Abmelden die Variable su nicht initialisiert.
 

bifidus

Mitglied
Genau da liegt der Fehler. Danke.

Ich habe das mal mit einer Systemausgabe im Konstruktor von ActionController getestet. Insgesamt kriege ich drei Instanzen von ActionController.

Eine beim Programmstart (die Main liegt in ActionController), dann beim bilden vom SVAMainFrame (das Hauptfenster), und schliesslich in der Login-Klasse (die habe ich nicht gepostet gehabt).

Kann ich die beim Programmstart gebildete Instanz von ActionController an das Hauptfenster übergeben? Und von dort an die Login Klasse? Also so was in der Form

Java:
SVAMainFrame mf = new SVAMainFrame(this)

Wobei der Konstruktor von SVAMainFrame da irgendwie so lautet würde:

Java:
SVAMainFrame(ActionController ac){
[...]
}
 
Zuletzt bearbeitet:

bifidus

Mitglied
Wie kann ich das am besten bewerkstelligen? Die Main lieget im ActionController. In dieser Main bilde ich eine Instanz von SVAMainFrame. Damit ich in dieser Klasse SVAMainFrame nicht eine neue Instanz von ActionController machen muss, soll die erste Instanz von ActionController an SVAMainFrame "weitergegeben" werden. Geht das?
 

bifidus

Mitglied
ok, ich habs jetzt geschafft, den ActionController überall durchzureichen. Jetzt scheint es zu funktionieren. Danke allen für die Hilfe.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Daten aus Import Datei auslesen und sortieren Java Basics - Anfänger-Themen 2
A Daten aus einer HashMap aus einer DB speichern und mit neuen Werten vergleichen Java Basics - Anfänger-Themen 8
Mady Daten von JList & Combobox in JTable adden Java Basics - Anfänger-Themen 2
M Daten aus errechneter Methode in Datenbank(SQLite) schreiben Java Basics - Anfänger-Themen 60
W Daten in Echtzeit übernehmen Java Basics - Anfänger-Themen 5
Z Java ArrayList speichert falsche Daten ab bzw. gibt falsche Daten aus? Java Basics - Anfänger-Themen 42
M Daten aus .txt Datei einlesen und weiterverarbeiten Java Basics - Anfänger-Themen 80
I H2 Datenbank starten / Daten in File speichern Java Basics - Anfänger-Themen 25
M Mehrere Daten/ Variablen Speichern Java Basics - Anfänger-Themen 9
E fehlermeldung bei richtigen login daten Java Basics - Anfänger-Themen 7
C Java Funktion: externe Daten vom Internet einbinden Java Basics - Anfänger-Themen 2
P Schiebefix - ArrayList überschreibt Daten Java Basics - Anfänger-Themen 3
S Daten/Klassen/Packages richtig updaten!? Java Basics - Anfänger-Themen 2
E Wie gebe ich alle Daten zwischen zwei Zeitpunkten aus? Java Basics - Anfänger-Themen 2
H Daten aus einer Datei in eine Liste speichern Java Basics - Anfänger-Themen 23
M Tabellen- Daten laden Java Basics - Anfänger-Themen 2
A Klasse um daten zu einlesen Java Basics - Anfänger-Themen 26
A Literale für primitive Daten Typen Java Basics - Anfänger-Themen 4
N Zwei Daten (Datum) miteinander vergleichen, abspeichern, laden Java Basics - Anfänger-Themen 4
A Daten auslesen/vergleichen Java Basics - Anfänger-Themen 3
D Sportwetten Daten Atomatisch analysieren um optimale Strategie zu erhalten Java Basics - Anfänger-Themen 6
S Java Daten in Excel speichern Java Basics - Anfänger-Themen 1
S Daten speichern, ohne Datenbank Java Basics - Anfänger-Themen 8
L Daten aus ArrayList in Datenbank durchsuchen Java Basics - Anfänger-Themen 5
Shallty Daten speichern und ändern? Java Basics - Anfänger-Themen 32
M Sqlite table löschen und daten einfügen Java Basics - Anfänger-Themen 5
S Binäre-Suche bei unsortierten Daten Java Basics - Anfänger-Themen 7
N Was passiert wenn wir Daten auf der Festplatte abspeichern wollen? bzgl. BufferStreams Java Basics - Anfänger-Themen 9
T Daten von Objekten speichern Java Basics - Anfänger-Themen 7
A Minesweeper - Daten Java Basics - Anfänger-Themen 46
A Eingelesene Daten in Array(Liste) abspeichern? Java Basics - Anfänger-Themen 18
S Daten aus zwei Verschiedenen Tabellen in eine ArrayListe Java Basics - Anfänger-Themen 4
WPS1000 Input/Output Wie aktiviere ich den Daten Transfer von der RS232 in meine Java Applikation Java Basics - Anfänger-Themen 2
R Eigenes Protokoll zur Übermittlung von Daten zum Webserver? Java Basics - Anfänger-Themen 4
A Reader wohin werden Daten gespeichert? Java Basics - Anfänger-Themen 7
M Erste Schritte CSV-File einlesen und Daten verarbeiten Java Basics - Anfänger-Themen 5
S Daten aus eigenständiger .class-Datei abrufen Java Basics - Anfänger-Themen 1
E Daten dem Super Aufruf übergeben Java Basics - Anfänger-Themen 3
M jTabel mit Daten Füllen Java Basics - Anfänger-Themen 5
M Wie erzeuge ich die Differenz von zwei Daten in Stunden?? Java Basics - Anfänger-Themen 2
S Daten lesen und speichern Java Basics - Anfänger-Themen 26
S JTable mit Daten füllen Java Basics - Anfänger-Themen 7
L Java Programm zum Auswerten von Daten Java Basics - Anfänger-Themen 11
H Passwortmanager, Sicherheit der Daten Java Basics - Anfänger-Themen 12
G Best Practice Wie große "Tabellen" effizient durchsuchen und Daten händeln? Java Basics - Anfänger-Themen 15
U Daten aus Datei einlesen Java Basics - Anfänger-Themen 4
M Best Practice Daten-Import /Trabsfomration aus Textdatei Java Basics - Anfänger-Themen 12
R JTable Suchfunktion mit SQL Daten Java Basics - Anfänger-Themen 2
E Daten gehen nicht in Datenbank Java Basics - Anfänger-Themen 14
M Erste Schritte Speichern von mehreren Daten Java Basics - Anfänger-Themen 3
J Daten einer Textdatei in ein JTable importieren. Java Basics - Anfänger-Themen 3
F Daten von Thread an den aufrufenden zurückgeben Java Basics - Anfänger-Themen 22
C Endlosschleife bei füllen von Daten im JTable Java Basics - Anfänger-Themen 5
N Erste Schritte Dedicated Server \ Senden und Empfangen von Daten/Befehlen Java Basics - Anfänger-Themen 2
A Probleme beim zykl. aktulisieren von Daten in JTable Java Basics - Anfänger-Themen 3
D NPE beim laden von Daten aus MySQL Java Basics - Anfänger-Themen 9
P Einlesen von Daten via BufferedReader Java Basics - Anfänger-Themen 4
P Methoden ausgelesene (CSV-) Daten in Liste einer anderen Klasse einlesen Java Basics - Anfänger-Themen 0
F Daten aus Excel-Tabelle in Java importieren Java Basics - Anfänger-Themen 15
F Http Post von mehreren Daten Java Basics - Anfänger-Themen 5
F Daten auf Webserver laden - wiederholen bei Fehler Java Basics - Anfänger-Themen 0
W Best Practice problemabhängige Persistentmachung von Daten Java Basics - Anfänger-Themen 6
P Daten von Internetseite auslesen Java Basics - Anfänger-Themen 10
N Daten/Formular per POST an Firefox/Browser senden Java Basics - Anfänger-Themen 7
D Daten mit Apache POI in eine Excel Datei schreiben Java Basics - Anfänger-Themen 5
T JTable Daten aus txt datei Java Basics - Anfänger-Themen 3
T printf Daten aus der Tabelle in Excel übernehmen Java Basics - Anfänger-Themen 5
P zweidimensionales Array anlegen und mit DB-Daten füllen Java Basics - Anfänger-Themen 14
V Einlesen von Daten Java Basics - Anfänger-Themen 8
J TableView zeigt keine Daten an Java Basics - Anfänger-Themen 14
J Daten im Programm speichern Java Basics - Anfänger-Themen 14
N Interface Daten einem Implementierten Interface zuweisen Java Basics - Anfänger-Themen 37
O Probleme mit CSV Daten Java Basics - Anfänger-Themen 10
M Arrays: Trennung von Daten und Darstellung Java Basics - Anfänger-Themen 1
S Daten aus Array in Klasse übertragen Java Basics - Anfänger-Themen 12
M Wie sicher sind Daten im Java Programm? Java Basics - Anfänger-Themen 9
R Daten via Post an php Script senden Java Basics - Anfänger-Themen 1
B Probleme bei "Daten in CSV File schreiben". Java Basics - Anfänger-Themen 9
C Datei mit Daten einlesen und höchsten wert der zweiten Spalte ermitteln Java Basics - Anfänger-Themen 1
W (XML/XSL) Daten aus Eclipse in eine Klasse Laden. Java Basics - Anfänger-Themen 1
I Daten speichern ohne Datenbank Java Basics - Anfänger-Themen 20
D Daten von einem int in einen string Java Basics - Anfänger-Themen 5
L Daten aus Array Feld löschen Java Basics - Anfänger-Themen 2
T Input/Output Daten/Objekte einfach speichern Java Basics - Anfänger-Themen 5
IngoF GUI mit Thread Daten austauschen. Java Basics - Anfänger-Themen 6
S Daten aus anderen Dateien in neue Datei einlesen Java Basics - Anfänger-Themen 3
fLooojava Daten im selben Netzwerk an IP Java Basics - Anfänger-Themen 1
M Junit Tests durchführen, die eine Verbindung zu einer Daten erfordern Java Basics - Anfänger-Themen 3
K HashMap mit Daten aus ArrayList befüllen Java Basics - Anfänger-Themen 14
P Daten auslesen und in CSV speichern Java Basics - Anfänger-Themen 6
J Daten aus zweiter Klasse importieren Java Basics - Anfänger-Themen 33
C Daten speichern und laden Java Basics - Anfänger-Themen 6
S Je nach erhaltene Daten unterschiedlich reagieren (Design Pattern?) Java Basics - Anfänger-Themen 3
J Daten von einer PHP Datei ablesen Java Basics - Anfänger-Themen 1
B Klassen Zugriff auf Daten der Child-Klasse Java Basics - Anfänger-Themen 9
K Daten (im Sinne von Datum) aus Webseiten extrahieren Java Basics - Anfänger-Themen 6
S Erste Schritte Tage zwischen 2 Daten berechnen Java Basics - Anfänger-Themen 6
A daten vom 1d array in 2d matrix speichern Java Basics - Anfänger-Themen 3
R csv-Datei auslesen und ausgelesene Daten in neue csv-Datei speichern Java Basics - Anfänger-Themen 2
Z Differenz zwischen 2 Daten berechnen, ohne importiere Funktionen! Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben