Abfrageergebnis richtig, trotzdem Fehlermeldung

Status
Nicht offen für weitere Antworten.

cam

Bekanntes Mitglied
Hallo,

in folgendem Codeabschnitt frage ich die Login-Daten ab. Das funktioniert auch soweit ganz gut, nur wird dann die Login-Maske nicht unsichtbar gesetzt und die nächste sichtbar und es kommt eine Fehlermeldung, dass die Verbindung fehlgeschlagen ist.

Code:
Java:
/**
 * Lokale Klasse für Button-Events
 */
class EvtListenerAction implements ActionListener{

   //Event-Handler
   public void actionPerformed(ActionEvent event) {
	int count = 0; //nach 3. Versuch wird die Applikation geschlossen
	//Button Anmelden
	if(event.getActionCommand().equals(ANMELDEN_LABEL)){
		//Benutzername auslesen und testen
		String benName1;
		benName1 = txtBenName1.getText();
		benName1 = benName1.trim();
		System.out.println(benName1);
				
		try{
    			PreparedStatement stmBenName1 = (PreparedStatement) cn.prepareStatement
                                                                         ("SELECT nutz_name FROM nutzer WHERE nutz_name = ?");
    			stmBenName1.setString(1, benName1);
    			rs = stmBenName1.executeQuery();
    			if (!rs.next()) {
    				if(count < 2){
    					System.out.println("Falscher Benutzername");
    					txtBenName1.setText(null);
    					txtPass1.setText(null);
    					count++;
    				}
    				else{
    					//Message.login(); 
    				}
			}
		}catch(Exception ex){
			System.out.println("Keine Verbindung (login-user): " + ex);
			ex.printStackTrace();
		}
				
		//Passwort auslesen und testen
		String pass1;
		pass1 = txtPass1.getText();
		pass1 = pass1.trim();
		System.out.println(pass1);
				
    		try{
    			CallableStatement callPasswortEntschl = cn.prepareCall("{call PasswortEntschl(?, ?)}");
    			callPasswortEntschl.setString(1, benName1);
    			callPasswortEntschl.registerOutParameter(2, Types.VARCHAR);
    			callPasswortEntschl.execute();
    			String passw1 = callPasswortEntschl.getString(2);
    			passw1 = passw1.trim();
    			System.out.println(passw1);
    			if(count < 2){
   				if(passw1.equals(pass1)){ 
  				        System.out.println("Richtiges Passwort");
   					txtBenName1.setText(null);
   					txtPass1.setText(null);
   					login.setVisible(false);
   					start1.setVisible(true);
   				}
   				else{
   					System.out.println("Falsches Passwort");
   					txtBenName1.setText(null);
   					txtPass1.setText(null);
   					count++;
   				}
    			}
    			else{
    				//Message.login(); 
    			}    				
    		}catch(Exception ex){
    			System.out.println("Keine Verbindung (login-password): " + ex);
			ex.printStackTrace();
    		}
	}
        ...
}

Fehler:

Verbindung hergestellt.
Demo
java.lang.NullPointerException
at main.Main$EvtListenerAction.actionPerformed(Main.java:270)
at java.awt.Button.processActionEvent(Unknown Source)
at java.awt.Button.processEvent(Unknown Source)
at java.awt.Component.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)
demo
demo
Richtiges Passwort
Keine Verbindung (login-password): java.lang.NullPointerException
 
S

SlaterB

Gast
welche Zeile ist denn 270?
nach
> System.out.println("Richtiges Passwort");
kommen ja noch diverse Codezeilen,

> txtBenName1.setText(null);
> txtPass1.setText(null);
> login.setVisible(false);
> start1.setVisible(true);

usw.,
wenn davon was null ist -> schon ne NullPointerException

> und es kommt eine Fehlermeldung, dass die Verbindung fehlgeschlagen ist.

es kommt irgendeine Exception, nur deine Ausgabe behautet dann, dass 'die Verbindung fehlgeschlagen ist'
 

cam

Bekanntes Mitglied
Ich verstehe aber nicht warum.
Ich habe login doch public deklariert und in der main-Methode funktioniert auch alles, aber nicht mehr im ActionListener.
 
S

SlaterB

Gast
ich kann mitfühlen, aber ohne Code den Fehler nicht erkennen ;)

andere Objekte, andere Variablen, wieder auf null gesetzt, nie initialisiert sondern nur mit einer lokalen Variable gearbeitet,
vieles möglich
 

cam

Bekanntes Mitglied
Java:
package main;

import java.awt.*;
import java.awt.event.*;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.Types;

public class Main extends Frame{
	
	public static final Color	COLOR_BACKGROUND_LOGIN	= new java.awt.Color(218, 218, 218);
	public static final Color 	COLOR_BACKGROUND_MASK	= new java.awt.Color(255, 255, 196);
	public static final Color	COLOR_BACKGROUND_RUECK	= new java.awt.Color(217, 255, 255);

	public static final int		DLG_WIDTH_LOGIN			= 319;	//Login-Breite
	public static final int		DLG_HEIGHT_LOGIN		= 169;	//Login-Höhe
	
	public static final int		DLG_WIDTH_MASK			= 290;	//Masken-Breite
	public static final int		DLG_HEIGHT_MASK			= 210;	//Masken-Höhe
	
	public static final int		DLG_X_MARGIN			= 6;	//Rand links/rechts
	public static final int		DLG_X_MARGIN_START1		= 50;	//Rand links/rechts - Hauptmenü
	public static final int		DLG_Y_MARGIN			= 8;	//Rand oben/unten
	public static final int		DLG_ITEM_PADDING		= 4;	//Zwischenraum
	public static final int		DLG_ITEM_PADDING_LOGIN	= 10;	//Zwischenraum Login
	public static final int		DLG_ITEM_HEIGHT			= 20;	//Item-Höhe
	public static final int     DLG_LABEL_WIDTH         = 200;  // Label-Breite
	
	public static Frame			login;
	public static Frame			start1;
	
	public static final String	ANMELDEN_LABEL			= "Anmelden";
	public static final String	ABBRECHEN_LABEL			= "Abbrechen";
	
	//Datenbankverbindung
	public static Connection 	cn 						= null;
	public static Statement 	st 						= null;
	public static ResultSet 	rs 						= null;
	
	//Event-Handler
	private EvtListenerWindow	EvtHandlerWindow		= new EvtListenerWindow();
	private EvtListenerAction	EvtHandlerAction		= new EvtListenerAction();
	
	//Layout-Komponenten
	//Login
	private Label			lBenName1		= new Label("Benutzername");
	private TextField		txtBenName1		= new TextField();
	private Label			lPass1			= new Label("Passwort");
	private TextField 		txtPass1		= new TextField();	
	private Button			btAnmelden		= new Button(ANMELDEN_LABEL);
	private Button			btAbbrechen		= new Button(ABBRECHEN_LABEL);
	
	//start1 - Hauptmenü
	private Label			lNeuEinlagern	= new Label("F1 - Neu Einlagern");
	private Label			lWiederEinlagern= new Label("F2 - Wieder Einlagern");
	private Label			lMaterialanf	= new Label("F3 - Materialanforerung");
	private Label			lAuslagern		= new Label("F4 - Auslagern");
	private Label			lBenAbmelden	= new Label("F5 - Benutzer abmelden");
	private Label			lBeenden		= new Label("F6 - Programm beenden");
	
	/**
	 * Konstruktor
	 */
	public Main(String title) throws Exception{
		//Basisklasse initialisieren
		super(title);
		//Event-Handler registrieren
		addWindowListener(EvtHandlerWindow);
		btAnmelden.addActionListener(EvtHandlerAction);
		btAbbrechen.addActionListener(EvtHandlerAction);
		//Focus setzen
		txtBenName1.requestFocus();
	}

	public static void main(String[] args) throws Exception{
		
		//Datenbankverbindung aufbauen
		try{
			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
			cn = DriverManager.getConnection("jdbc:sqlserver://192.168.5.99; databaseName = db; user = xyz; password = abc");
			st = cn.createStatement();			
			System.out.println("Verbindung hergestellt.");
		}catch(Exception ex){
			System.out.println("Keine Verbindung hergestellt: " + ex);
			ex.printStackTrace();
		}
		
		Dimension 	ParentFrame;
		Dimension 	MyFrame;
		Insets		MyInsets;
		int			xOffset, yOffset;
		int			LineHeight;
		
		//Runtime-Objekt erzeugen
		Main login = new Main("Login");
		Main start1 = new Main("Hauptmenü");
	
		//Bildschirmgröße erfragen
		ParentFrame = Toolkit.getDefaultToolkit().getScreenSize();
		
		//Login
		//Höhe einer Zeile
		LineHeight = DLG_ITEM_HEIGHT + DLG_ITEM_PADDING_LOGIN;
		//Maskengröße
		MyFrame = new Dimension(DLG_WIDTH_LOGIN, DLG_HEIGHT_LOGIN);
		//Hintergrundfarbe
		login.setBackground(COLOR_BACKGROUND_LOGIN);
		//freies Layout setzen
		login.setLayout(null);
		//Position und Größe des Login-Fensters setzen
		login.setBounds((ParentFrame.width - MyFrame.width) / 2, (ParentFrame.height - MyFrame.height) / 2, MyFrame.width, MyFrame.height);
		//Maske nicht größenveränderbar
		login.setResizable(false);
		//Fenster sichtbar
		login.setVisible(true);
		//Erfrage die Abmessungen vom Dialog-Rand und Titelbalken
		MyInsets = login.getInsets();
		//Komponenten hinzufügen
		//Offset links
		xOffset = MyInsets.left + DLG_X_MARGIN;
		//Offset oben
		yOffset = MyInsets.top + 2 * DLG_Y_MARGIN;
		//Benutzername
		login.lBenName1.setBounds(xOffset, yOffset, 90, DLG_ITEM_HEIGHT);
		login.add(login.lBenName1);
		login.txtBenName1.setBounds(xOffset + 90 + DLG_ITEM_PADDING_LOGIN, yOffset, 200, DLG_ITEM_HEIGHT);
		login.add(login.txtBenName1);
		//Passwort
		yOffset += LineHeight;
		login.lPass1.setBounds(xOffset, yOffset, 90, DLG_ITEM_HEIGHT);
		login.add(login.lPass1);
		login.txtPass1.setBounds(xOffset + 90 + DLG_ITEM_PADDING_LOGIN, yOffset, 200, DLG_ITEM_HEIGHT);
		login.txtPass1.setEchoChar('*'); //eingegebene Zeichen werden als "*" angezeigt
		login.add(login.txtPass1);
		//Buttons
		xOffset += 60;
		yOffset += 60;
		login.btAnmelden.setBounds(xOffset, yOffset, 80, 25);
		login.add(login.btAnmelden);
		login.btAbbrechen.setBounds(xOffset + 80 + 30, yOffset, 80, 25);
		login.add(login.btAbbrechen);
		
		//start1 - Hauptmenü
		LineHeight = DLG_ITEM_HEIGHT + DLG_ITEM_PADDING;
		MyFrame = new Dimension(DLG_WIDTH_MASK, DLG_HEIGHT_MASK);
		start1.setBackground(COLOR_BACKGROUND_MASK);
		start1.setLayout(null);
		start1.setBounds((ParentFrame.width - MyFrame.width) / 2, (ParentFrame.height - MyFrame.height) / 2, MyFrame.width, MyFrame.height);
		start1.setResizable(false);
		start1.setVisible(false);
		MyInsets = start1.getInsets();
		xOffset = MyInsets.left + DLG_X_MARGIN_START1	;
		yOffset = MyInsets.top + 2 * DLG_Y_MARGIN;
		start1.lNeuEinlagern.setBounds(xOffset, yOffset, DLG_LABEL_WIDTH, DLG_ITEM_HEIGHT);
		start1.add(start1.lNeuEinlagern);
		yOffset += LineHeight;
		start1.lWiederEinlagern.setBounds(xOffset, yOffset, DLG_LABEL_WIDTH, DLG_ITEM_HEIGHT);
		start1.add(start1.lWiederEinlagern);
		yOffset += LineHeight;
		start1.lMaterialanf.setBounds(xOffset, yOffset, DLG_LABEL_WIDTH, DLG_ITEM_HEIGHT);
		start1.add(start1.lMaterialanf);
		yOffset += LineHeight;
		start1.lAuslagern.setBounds(xOffset, yOffset, DLG_LABEL_WIDTH, DLG_ITEM_HEIGHT);
		start1.add(start1.lAuslagern);
		yOffset += LineHeight;
		start1.lBenAbmelden.setBounds(xOffset, yOffset, DLG_LABEL_WIDTH, DLG_ITEM_HEIGHT);
		start1.add(start1.lBenAbmelden);
		yOffset += 35;
		start1.lBeenden.setBounds(xOffset, yOffset, DLG_LABEL_WIDTH, DLG_ITEM_HEIGHT);
		start1.add(start1.lBeenden);
	}
	
	/**
	 * Beenden der Applikation
	 */
	private void Shutdown(){
		//Fenster verdecken
		setVisible(false);
		//Resourcen freigeben
		dispose();
		//Beenden
		System.exit(0);
	}

	/**
	 * Lokale Klasse für Window-Events
	 */
	class EvtListenerWindow extends WindowAdapter{
		/**
		 * Handler für Close-Event
		 */
		public void windowClosing(WindowEvent event){
			Shutdown();
		}
	}
	
	/**
	 * Lokale Klasse für Button-Events
	 */
	class EvtListenerAction implements ActionListener{

		//Event-Handler
		public void actionPerformed(ActionEvent event) {
			int count = 0; //nach 3. Versuch wird die Applikation geschlossen
			//Button Anmelden
			if(event.getActionCommand().equals(ANMELDEN_LABEL)){
				//Benutzername auslesen und testen
				String benName1;
				benName1 = txtBenName1.getText();
				benName1 = benName1.trim();
				System.out.println(benName1);
				
				try{
    				PreparedStatement stmBenName1 = (PreparedStatement) cn.prepareStatement("SELECT nutz_name FROM nutzer WHERE nutz_name = ?");
    				stmBenName1.setString(1, benName1);
    				rs = stmBenName1.executeQuery();
    				if (!rs.next()) {
    					if(count < 2){
    						System.out.println("Falscher Benutzername");
    						//Message.loginBen(); 
    						txtBenName1.setText(null);
    						txtPass1.setText(null);
    						count++;
    					}
    					else{
    						//Message.login();
    					}
					}
				}catch(Exception ex){
					System.out.println("Keine Verbindung (login-user): " + ex);
					ex.printStackTrace();
				}
				
				//Passwort auslesen und testen
				String pass1;
				pass1 = txtPass1.getText();
				pass1 = pass1.trim();
				System.out.println(pass1);
				
    			try{
    				CallableStatement callPasswortEntschl = cn.prepareCall("{call PasswortEntschl(?, ?)}");
    				callPasswortEntschl.setString(1, benName1);
    				callPasswortEntschl.registerOutParameter(2, Types.VARCHAR);
    				callPasswortEntschl.execute();
    				String passw1 = callPasswortEntschl.getString(2);
    				passw1 = passw1.trim();
    				System.out.println(passw1);
    				if(count < 2){
   						if(passw1.equals(pass1)){ 
  							System.out.println("Richtiges Passwort");
   							txtBenName1.setText(null);
   							txtPass1.setText(null);
   							login.setVisible(false);
   							start1.setVisible(true);
   						}
   						else{
   							System.out.println("Falsches Passwort");
   							//Message.loginPass(); 
   							txtBenName1.setText(null);
   							txtPass1.setText(null);
   							count++;
   						}
    				}
    				else{
    					//Message.login(); 
    				}    				
    			}catch(Exception ex){
    				System.out.println("Keine Verbindung (login-password): " + ex);
					ex.printStackTrace();
    			}
			}
			//Button Abbrechen
			if(event.getActionCommand().equals(ABBRECHEN_LABEL)){
				Shutdown();
			}
		}
		
	}
}
 
S

SlaterB

Gast
in der main-Methode definierst du eine lokale Variable login:
> Main login = new Main("Login");

das statische Klassenattribut bleibt null

schreibe
login = new Main("Login");
oder
Main.login = new Main("Login");
statt
> Main login = new Main("Login");
 

cam

Bekanntes Mitglied
Ok, nachdem ich nun alle Label, Textfelder und Buttons auf static gesetzt habe, funktioniert es. Allerdings kommt jetzt folgende Fehlermeldung:

Verbindung hergestellt.
Demo
java.lang.NullPointerException
demo
demo
Richtiges Passwort

Falscher Benutzername

Keine Verbindung (login-password): java.lang.NullPointerException
at main.Main$EvtListenerAction.actionPerformed(Main.java:262)
at java.awt.AWTEventMulticaster.actionPerformed(Unknown Source)
at java.awt.Button.processActionEvent(Unknown Source)
at java.awt.Button.processEvent(Unknown Source)
at java.awt.Component.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)

Zeile 262: passw1 = passw1.trim();
 
S

SlaterB

Gast
muss ich jetzt wirklich wieder "passw1 ist null" schreiben, bevor es weitergeht?
zu testen übrigens mit
System.out.println("passw1: "+passw1);
vor dem trim-Aufruf,

ob der Rückgabewert von CallableStatement null sein kann oder nicht, kann ich nicht beurteilen
 

cam

Bekanntes Mitglied
Darauf bin ich auch gekommen...
Aber da ich schon eine Testausgabe gemacht habe und auch eben deine Testausgabe probiert habe und das richtige Passwort da steht, sich das Ergebnis aber nicht geändert hat, dachte ich, ich frage noch mal.
 

cam

Bekanntes Mitglied
Hab's gefunden - du hast recht, passw1 ist null, weil ich die Textfelder lösche. Wenn ich das auskommentiere, funktioniert es.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S MongoDB - Abfrageergebnis in Array speichern Datenbankprogrammierung 2
D Richtig verknüpfen mit kombinierten Schlüsseln Datenbankprogrammierung 6
K Wie speichere ich das DB Passwort richtig ab? Datenbankprogrammierung 19
J Java fügt Datensätze ein aber diese werden nicht richtig abgefragt Datenbankprogrammierung 3
D MySQL Connection richtig herstellen. Wie ? Datenbankprogrammierung 7
flenst111 SQL-Statement Wie konfiguriert man JDBC-Connect.richtig, damit es bei riesigen Tabs keinen Speicherüberlauf gibt? Datenbankprogrammierung 1
M SQL UPDATE richtig anwenden BITTE um HILFE Datenbankprogrammierung 3
A MySQL Datensatz wird nicht richtig gelöscht Datenbankprogrammierung 6
G m:n Beziehung - Tabelle richtig erzeugen Datenbankprogrammierung 3
V mysql - tree auslesen und richtig ordnen Datenbankprogrammierung 4
G Insert in MS SQL Server Db funktioniert nicht richtig Datenbankprogrammierung 16
T insert funzt net richtig Datenbankprogrammierung 6
M Die gezogenen Daten werden nicht richtig ins JTableeingefügt Datenbankprogrammierung 8
A delete aus datenbank, funktioniert nicht so richtig Datenbankprogrammierung 10
H SQL Abfrage funktionert nicht so richtig Datenbankprogrammierung 2
M Daten werde gesetzt, aber trotzdem Fehlermeldung! Datenbankprogrammierung 3

Ähnliche Java Themen

Neue Themen


Oben