Getter/Setter

Status
Nicht offen für weitere Antworten.

cam

Bekanntes Mitglied
Hallo,

also ich will nun mein Projekt überarbeiten und hab des öfteren gehört und gelesen, public-Variablen sind nicht so toll, lieber mit getter und setter arbeiten. Hab auch dazu einiges gelesen und mit meiner Chefin darüber diskutiert. Sie programmiert FoxPro und ist der Meinung, dass doch public-Variablen gut sind und was getter und setter denn für einen Sinn haben? (Also mein Projekt ist in Java.) Ich kann ihr das aber nicht erklären, weil ich es selbst nicht verstehe.

Könnte mir (uns) das bitte nochmal jemand erklären und evtl ein kleines Beispiel zeigen?
 

ARadauer

Top Contributor
ich muss jedoch anmerken, dass getter und setter einfach zum guten java stil gehören. es ist schon fast standard.

Der grundgedanke dahinter ist einfach, dass ich das innere meiner klasse nach aussen hin verstecke und nur durch eine öffentliche schnittstelle (meine public methoden) sichtbar mache.


ob jetzt deine FoxPro programmierende Chefin das gut findet, ist irrelevant, man macht es in java so.

Code:
public class Kunde {
   
   private String name;
   private int alter;   

   public Kunde(String name, int alter) {
      super();
      this.name = name;
      this.alter = alter;
   }
   
   public String getName() {
      return name;
   }
   public void setName(String name) {
      this.name = name;
   }
   
   public int getAlter() {
      return alter;
   }
   public void setAlter(int alter) {
      this.alter = alter;
   }    

}
 

cam

Bekanntes Mitglied
Also wenn ich in einer Klasse über ein Formular den Namen abfrage, z.B. beim Login, schreibe ich da in diese Klasse

public void setName(String name) {
this.name = name;
}

?

Und in einer anderen Klasse, in der ich den Namen noch einmal brauche dann

public String getName() {
return name;
}

?

Mir fehlt einfach die Vorstellungskraft dazu. Wenn ich eine Variable public deklariere, dann kann ich einfach überall darauf zugreifen, irgendwie kann ich das aber nicht auf die getter und setter - Methoden übertragen.

Und was ist z.B. mit meinen Elementen im Formular?:

Code:
    public static JInternalFrame login;
    public static JLabel benName;
    public static JLabel pass;
    public static JTextField txtBenName;
    public static JPasswordField txtPass;
    public static JButton btAnmelden;
    public static JButton btAbbrechen;
    public static JPanel benNamePanel;
    public static JPanel passPanel;
    public static JPanel btLoginPanel;

Das steht in meiner Klasse Frame.java und verarbeitet wird das ganze ja in Login.java.

Code:
char[] pass = Frame.txtPass.getPassword();
[/code]
 

Marco13

Top Contributor
cam hat gesagt.:
Also wenn ich in einer Klasse über ein Formular den Namen abfrage, z.B. beim Login, schreibe ich da in diese Klasse
...
Und in einer anderen Klasse, in der ich den Namen noch einmal brauche dann

Die get- und set-Methoden kommen immer in die Klasse, wo das Field (die Variable) liegt, auf die man zugrifen will. Die Vorteile sind durch Websuche zu finden. Die wichtigsten sind IMHO
- Man kann Variablen "Read-Only" machen (einfach nur get aber kein set anbieten)
- Man kann in den set-Methoden mehr machen: GEWÜNSCHTE Seiteneffekte, Sicheheitsabfragen...
Code:
class Person
{
    private int alter;
    
    void setAlter(int neuesAlter)
    {
        if (neuesAlter < 0) System.out.println("Vergiss es");
        else alter = neuesAlter;
    }
}



Wenn ich eine Variable public deklariere, dann kann ich einfach überall darauf zugreifen, irgendwie kann ich das aber nicht auf die getter und setter - Methoden übertragen.
Code:
    public static JInternalFrame login;
    public static JLabel benName;
...
"Von überall" drauf zugreifen kann man nur, wenn sie auch static sind - und das ist (egal ob public oder nicht) grundsätzlich (d.h. mit GANZ wenigen Ausnahmen) gröbster Unfug - egal, in welcher Programmiersprache!
 

cam

Bekanntes Mitglied
Naja, aber was mache ich denn, wenn mir gesagt wird, die müssen static sein? Ich benutze Eclipse Ganymede.
Ich habe wirklich absolute Schwierigkeiten mit dem Thema, wie ihr ja merkt :bahnhof:

Code:
static Connection cn = null;
static PreparedStatement statement = null;
static ResultSet rs = null;

Wenn ich hier das static weglasse, kommen Fehlermeldungen und static wird verlangt.

In den anderen Klassen verwende ich diese Variablen ja zur Datenbankabfrage:

Code:
        			try{
        				PreparedStatement statement = (PreparedStatement) Frame.cn.prepareStatement("SELECT nutz_name FROM nutzer WHERE nutz_name = ?");
        				statement.setString(1, benName);
        				Frame.rs = statement.executeQuery();

        				if (Frame.rs.next()) {
    						System.out.println("Nutzer");
    					}
    					else{
    						JOptionPane.showMessageDialog(null, "Sie sind kein Nutzer dieses Systems!", "Login", JOptionPane.OK_CANCEL_OPTION);
    						Frame.txtBenName.setText(null);
    					}
        			}catch(Exception ex){
        				System.out.println("Keine Verbindung: " + ex);
        			}
 

ARadauer

Top Contributor
Code:
Frame.cn.prepareStatement
ich programmiere seit 3 Jahren hauptberuflich in java, sowas seh ich mir gar nicht an ;-)
 

Ebenius

Top Contributor
@cam: Du solltest dringend Java-Grundlagen lernen! Am besten mit einem Buch. Durchhangeln macht Dich nicht glücklich.

Wenn Dein Englisch vernünftig ist, hilft vielleicht Das Sun-Tutorial-Zeugs. Ansonsten wurde hier im Forum viel empfohlen. Und nicht nur halb durchblättern, sondern von vorn das Konzept verstehen.
 

Marco13

Top Contributor
Zum static: Das ist eben das Gegenteil von einer vernünftigen, objektorientierten Modellierung. Plakativ-polemisch forumuliert: Wenn alles static ist, kann man gleich alles in eine Riesenklasse packen :autsch: Überleg' dir eine geeignete Klassenstruktur, ggf. mal nach sowas wie "Model View Controller" oder so Websuchen, und mach dir genau klar: 1. Was muss die jeweilige Klasse können (d.h. welche Methoden soll sie anbieten), und 2. Was braucht die Klasse, um diese Methoden anbieten zu können (d.h. welche Fields/Variablen braucht die Klasse)...
 

cam

Bekanntes Mitglied
Also ich hab ein bisschen probiert und bin soweit, dass keine Fehlermeldungen mehr kommen, aber es funktioniert trotzdem nicht:

Es kann keine Verbindung hergestellt werden: java.lang.ClassCastException: com.microsoft.sqlserver.jdbc.SQLServerStatement cannot be cast to java.sql.PreparedStatement
Demo
Keine Verbindung: java.lang.NullPointerException
demo
Keine Verbindung: java.lang.NullPointerException

So, wie es vorher war, kam folgendes:

Keine Verbindung: java.lang.ClassCastException: com.microsoft.sqlserver.jdbc.SQLServerStatement cannot be cast to java.sql.PreparedStatement
Demo
Nutzer
demo
Login erfolgreich

Verbindung.java:

Code:
package forms;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class Verbindung {

	private Connection cn = null;
	private PreparedStatement statement = null;
	private ResultSet rs = null;
	
    public Connection getCon(){
    	return cn;
    }

	public void setCon(Connection cn) {
		this.cn = cn;		
	}
	
	public PreparedStatement getPrepStat(){
		return statement;
	}
	
	public void setPrepStat(PreparedStatement statement){
		this.statement = statement;
	}
	
	public ResultSet getRes(){
		return rs;
	}
	
	public void setRes(ResultSet rs){
		this.rs = rs;
	}
}

Frame.java (Ausschnitt):

Code:
		try{
			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");	
			Verbindung verb = new Verbindung();
			verb.setCon(DriverManager.getConnection("jdbc:sqlserver://localhost; databaseName = Lager; user = sa; password = zie2oam"));			
			verb.setPrepStat((PreparedStatement)verb.getCon().createStatement());
			System.out.println("Verbindung hergestellt.");
		}catch(Exception ex){
			System.out.println("Es kann keine Verbindung hergestellt werden: " + ex);
		}
		Login.login();

Login.java:

Code:
package forms;

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

import javax.swing.JOptionPane;

/**
 * @author Cathleen
 *
 */
public class Login {

	public static void login() {		
		
		/**
		 * Prüfen, ob Passwort richtig
		 */
    
		Frame.btAnmelden.addActionListener(new ActionListener(){
        	int count = 0;
        	public void actionPerformed(ActionEvent event){
        		if(event.getActionCommand().equals("Anmelden")){
        			
    				//Benutzername
        			String benName = Frame.txtBenName.getText();
        			benName = benName.trim();
        			System.out.println(benName);
        			try{
        				Verbindung verb = new Verbindung();
        				PreparedStatement statement = (PreparedStatement)verb.getCon().prepareStatement("SELECT nutz_name FROM nutzer WHERE nutz_name = ?");
        				statement.setString(1, benName);
        				verb.setRes(statement.executeQuery());

        				if (verb.getRes().next()) {
    						System.out.println("Nutzer");
    					}
    					else{
    						JOptionPane.showMessageDialog(null, "Sie sind kein Nutzer dieses Systems!", "Login", JOptionPane.OK_CANCEL_OPTION);
    						Frame.txtBenName.setText(null);
    					}
        			}catch(Exception ex){
        				System.out.println("Keine Verbindung: " + ex);
        			}		
        			
        			//Passwort
        			char[] pass = Frame.txtPass.getPassword();
        			String passStr = new String(pass);
        			passStr = passStr.trim();
        			System.out.println(pass);
    			
        			try{
        				Verbindung verb = new Verbindung();
        				PreparedStatement stmPass = (PreparedStatement)verb.getCon().prepareStatement("SELECT passwort FROM nutzer WHERE nutz_name = ?");
        				stmPass.setString(1, benName);
        				verb.setRes(stmPass.executeQuery());
        				if(verb.getRes().next()){
        					String passw = verb.getRes().getString(1);
        					passw = passw.trim();
        					if(count < 2){
       							if(passw.equals(passStr)){
       								System.out.println("Login erfolgreich");
       								Frame.login.setVisible(false);
       								//Frame.start1.setVisible(true);
       							}
       							else{
       								JOptionPane.showMessageDialog(null, "Sie haben ein falsches Passwort eingegeben!", "Login", JOptionPane.OK_CANCEL_OPTION);
       								count++;
       								System.out.println("Login nicht erfolgreich");
       							}
        					}
        					else{
        						JOptionPane.showMessageDialog(null, "Sie haben sich 3 Mal falsch angemeldet!", "Login", JOptionPane.OK_CANCEL_OPTION);
        						System.exit(0);
        					}
        				}
        			}catch(Exception ex){
        				System.out.println("Keine Verbindung: " + ex);
        			}	
        			
        		}
        	}
		});
		
		Frame.btAbbrechen.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent event){
				if(event.getActionCommand().equals("Abbrechen")){
					System.exit(0);
				}
			}
		});
	}
}
 

manuche

Bekanntes Mitglied
Kleine Anmerkung am Rande... Du solltest nicht soviele Aufrufe in einander Schachteln! Performance-technisch tut sich da nix allerdings wird es übersichtlicher und macht grade am Anfang das Denken in Objekten und dem Zusammenspiel mit Gettern und Settern einfacher!
 

cam

Bekanntes Mitglied
Also laut Debugger wird der jdbc-Treiber nicht gefunden, was aber nicht sein kann, denn wenn ich alles zurückstelle, wie der Code war, findet er den ja - also muss was mit den getter/setter falsch sein - bitte, kann sich das jemand ansehen?
Ich bin auch sofort still, wenn jemand eine Lösung findet oder sagt, alles ganz falsch.
 

manuche

Bekanntes Mitglied
com.microsoft.sqlserver.jdbc.SQLServerStatement cannot be cast to java.sql.PreparedStatement

Eventuell einen Import falsch gemacht? Das meine ich mit der Übersichtlichkeit... Wenn du jetzt nicht alles in eine Zeile schreibst ist der Fehler meist schneler erkennbar!
 

cam

Bekanntes Mitglied
Ich schreibe doch nur in eine Zeile, was in eine Zeile gehört? Nach jedem ";" fange ich doch neu an?

Diese Fehlermeldung kommt auch bei meinem vorherigen Stand, aber das Programm funktioniert trotzdem, also alle Abfragen, woher diese Meldung kommt, tja, das habe ich nicht herausgefunden, aber auch nicht weiter gesucht, weil es funktionierte ja.
 

manuche

Bekanntes Mitglied
Code:
Verbindung verb = new Verbindung(); 
                    PreparedStatement statement = (PreparedStatement)verb.getCon().prepareStatement("SELECT nutz_name FROM nutzer WHERE nutz_name = ?"); 
                    statement.setString(1, benName); 
                    verb.setRes(statement.executeQuery());
Geht zwar, ist aber unübersichtlich...
Grade am Anfang besser:
Code:
Connection con = verb.getCon();
PreparedStatement pstmt = con.prepareStatement("...");
...
ResultSet result = pstmt.executeQuery();
verb.setRes(result);
Wie gesagt, ist nicht falsch was du gemacht hast allerdings musst du so nen paar mehr Funktionen auf Ihre Richtigkeit prüfen wenn dir der Compiler nen Fehler in einer bestimmten Zeile anzeigt!

Und bei ner Exception funktioniert eben irgendwas nicht... Nur wenn es keine RuntimeException ist läuft dein Programm weiter... :D
Nullpointer Exception heisst übrigens, dass eine Referenz auf kein Objekt zeigt, du diese Referenz trotzdem benutzt.
Jetzt gilt es rauszufinden, warum die Referenz nicht auf ein Objekt zeigt!
 

Noctarius

Top Contributor
com.microsoft.sqlserver.jdbc.SQLServerStatement cannot be cast to java.sql.PreparedStatement

ist "com.microsoft.sqlserver.jdbc.SQLServerStatement" vielleicht kein PreparedStatement? ;) Ich mein es gibt ja auch nur Statement.

Wenn ich das richtig verstanden habe (bzw ex.printStackTrace() kann große Dienste beim Debugging leisten) entsteht der Fehler in Frame.java - daher schonmal versucht folgendes zu machen?
Code:
verb.setPrepStat(verb.getCon().prepareStatement());

falls der MsSql Treiber sowas kennt natürlich - Man kann eben nicht Alles in Alles zwängen ;)
 

cam

Bekanntes Mitglied
@Noctarius: Du hast recht, wenn ich "nur" Statement nehme, wird eine Verbindung hergestellt, also zumindest die erste Fehlermeldung verschwindet.

Aber beim Login bleiben die Fehlermeldungen, da hab ich ja auch noch PreparedStatements. Es wurde mir doch aber von vielen geraten, PreparedStatements zu nutzen? Soll ich jetzt doch wieder nur Statements nehmen???
 

cam

Bekanntes Mitglied
Das letzte ist quatsch, also die Verbindung nur mit Statement, das ist schon richtig, aber der Rest sollte auch mit PreparedStatement gehen.
 

manuche

Bekanntes Mitglied
Ich denke es wird an den Imports liegen...
Es kann zwei Klassen PreparedStatement in unterschiedlichen Packages geben! Und da ist es dann höchst wahrscheinlich nicht möglich zu casten!
 

cam

Bekanntes Mitglied
Ich hab als Import "java.sql.PreparedStatement"
Das hab ich auch bei der alten Version und da funktioniert es...
Ich such mal weiter...
 

manuche

Bekanntes Mitglied
Iwie hab ich den Überblick verloren... Ich gehe noch von den Sourcen von der ersten Seite aus!
In welcher Zeile welcher Klasse tritt da jetzt der Fehler aus und was steht in der Exception?
 

cam

Bekanntes Mitglied
Meldung:

Verbindung hergestellt.
Demo
Keine Verbindung (Benutzername): java.lang.NullPointerException
demo
Keine Verbindung (Passwort): java.lang.NullPointerException

Wird aus der Login.java kommen.
 

cam

Bekanntes Mitglied
Login.java:

Code:
package forms;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import javax.swing.JOptionPane;

public class Login {

	public static void login() {		
		
		/**
		 * Prüfen, ob Passwort richtig
		 */
    
		Frame.btAnmelden.addActionListener(new ActionListener(){
        	int count = 0;
        	public void actionPerformed(ActionEvent event){
        		if(event.getActionCommand().equals("Anmelden")){
        			
    				//Benutzername
        			String benName = Frame.txtBenName.getText();
        			benName = benName.trim();
        			System.out.println(benName);
        			try{
        				Verbindung verb = new Verbindung();
        				Connection con = verb.getCon();
        				PreparedStatement statement = con.prepareStatement("SELECT nutz_name FROM nutzer WHERE nutz_name = ?");
        				statement.setString(1, benName);
        				ResultSet result = statement.executeQuery();
        				verb.setRes(result);

        				if (verb.getRes().next()) {
    						System.out.println("Nutzer");
    					}
    					else{
    						JOptionPane.showMessageDialog(null, "Sie sind kein Nutzer dieses Systems!", "Login", JOptionPane.OK_CANCEL_OPTION);
    						Frame.txtBenName.setText(null);
    					}
        			}catch(Exception ex){
        				System.out.println("Keine Verbindung (Benutzername): " + ex);
        			}		
        			
        			//Passwort
        			char[] pass = Frame.txtPass.getPassword();
        			String passStr = new String(pass);
        			passStr = passStr.trim();
        			System.out.println(pass);
    			
        			try{
        				Verbindung verb = new Verbindung();
        				Connection con = verb.getCon();
        				PreparedStatement stmPass = con.prepareStatement("SELECT passwort FROM nutzer WHERE nutz_name = ?");
        				stmPass.setString(1, benName);
        				ResultSet result = stmPass.executeQuery();
        				verb.setRes(result);
        				if(verb.getRes().next()){
        					String passw = verb.getRes().getString(1);
        					passw = passw.trim();
        					if(count < 2){
       							if(passw.equals(passStr)){
       								System.out.println("Login erfolgreich");
       								Frame.login.setVisible(false);
       								//Frame.start1.setVisible(true);
       							}
       							else{
       								JOptionPane.showMessageDialog(null, "Sie haben ein falsches Passwort eingegeben!", "Login", JOptionPane.OK_CANCEL_OPTION);
       								count++;
       								System.out.println("Login nicht erfolgreich");
       							}
        					}
        					else{
        						JOptionPane.showMessageDialog(null, "Sie haben sich 3 Mal falsch angemeldet!", "Login", JOptionPane.OK_CANCEL_OPTION);
        						System.exit(0);
        					}
        				}
        			}catch(Exception ex){
        				System.out.println("Keine Verbindung (Passwort): " + ex);
        			}	
        			
        		}
        	}
		});
		
		Frame.btAbbrechen.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent event){
				if(event.getActionCommand().equals("Abbrechen")){
					System.exit(0);
				}
			}
		});
	}
}
 

manuche

Bekanntes Mitglied
Schreib in deine catch-Blöcke mal immernoch ex.printStackTrace() und dann sag was er da ausgibt!
So bekommst du die Funktionsaufrufe mit und in welcher Zeile sich der Fehler in welcher Funktion befindet...
Ggf dann nochmal entsprechenden Code zeigen, bitte!
 

cam

Bekanntes Mitglied
Also jetzt kommen folgende Meldungen:

Verbindung hergestellt.
Demo
Keine Verbindung (Benutzername): java.lang.NullPointerException
java.lang.NullPointerException
at forms.Login$1.actionPerformed(Login.java:38)
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.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
Keine Verbindung (Passwort): java.lang.NullPointerException
java.lang.NullPointerException
at forms.Login$1.actionPerformed(Login.java:64)
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.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)
 

Ebenius

Top Contributor
Jetzt musst Du natürlich die beiden StackTraces durchlesen, um herauszufinden was nicht funktioniert:
cams Konsole hat gesagt.:
at forms.Login$1.actionPerformed(Login.java:38)
[...]
at forms.Login$1.actionPerformed(Login.java:64)

Dann musst Du in beiden Zeilen in Login.java nachgucken und findest damit heraus welche Objekte null waren. Was steht denn in Deinem Source-Code in Login.java an Zeile 38 und 64? Wenn Du dort nachschaust, hast Du bestimmt schon selbst eine Idee was da schief geht, oder? Mitmachen und mitdenken bitte!

Ebenius
 

Ebenius

Top Contributor
In den beiden Zeilen steht:
Code:
PreparedStatement stmPass = con.IRGENDWAS(...);
Wenn da eine NullPointerException auftritt, dann ist "con" null. Du schaust Dir an, wo das "con" herkommt:
Code:
Verbindung verb = new Verbindung(); 
Connection con = verb.getCon();
Und nun weißt Du, dass von "verb.getCon()" null zurückgegeben wird. Und jetzt musst Du rausfinden, warum das so ist...
 

manuche

Bekanntes Mitglied
Damit wäre wohl klar, dass das Problem in der Klasse Verbindung besteht.
Über die Instanz dieser Klasse holst du dir ein Connection-Objekt welches du mit con.prepareStatement(...) benutzt...
da con allerdings null ist, wird eine NullPointerException geworfen!
Einfaml den Code der Klasse Verbindung bitte!
 

cam

Bekanntes Mitglied
Ich nehme an, dass es am PreparedStatement liegt. Ich weiß aber nicht warum, weil in meinem alten Code funktioniert es ja - also mit meinen public static Variablen. Da hab ich den Verbindungsaufbau auch mit Statement und die Abfragen mit PreparedStatement.
 

Ebenius

Top Contributor
cam hat gesagt.:
Ich nehme an, dass es am PreparedStatement liegt. Ich weiß aber nicht warum, weil in meinem alten Code funktioniert es ja - also mit meinen public static Variablen. Da hab ich den Verbindungsaufbau auch mit Statement und die Abfragen mit PreparedStatement.
Liest Du was ich schreibe und denkst Du mit? con ist null. Es liegt also nicht am Statement, sondern an der Verbindung...
 

cam

Bekanntes Mitglied
Verbindung.java:

Code:
package forms;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;

public class Verbindung {

	private Connection cn = null;
	private PreparedStatement statement = null;
	private ResultSet rs = null;
	private Statement st = null;
	
    public Connection getCon(){
    	return cn;
    }

	public void setCon(Connection cn) {
		this.cn = cn;
	}
	
	public PreparedStatement getPrepStat(){
		return statement;
	}
	
	public void setPrepStat(PreparedStatement statement){
		this.statement = statement;
	}
	
	public ResultSet getRes(){
		return rs;
	}
	
	public void setRes(ResultSet rs){
		this.rs = rs;
	}
	
	public Statement getStat(){
		return st;
	}
	
	public void setStat(Statement st){
		this.st = st;
	}
}
 

cam

Bekanntes Mitglied
@Ebenius: Entschuldige, ich habe aber übersehen, dass es schon eine 3. Seite gibt.
 

Ebenius

Top Contributor
Jetzt schau Dir Deine Klasse Verbindung an. Dort ist "cn" immer null, es sei denn jemand ruft die setCon()-Methode auf. Wer tut das wo und warum ist es nicht passiert, bevor Du auf die Verbindung zugreifst?
 

manuche

Bekanntes Mitglied
Guck dir mal die getCon-Methode an.... Da gibst du die Membervariable cn zurück. Diese wird aber IMMER mit null initialisiert es sei den sie wird mit der setCon-Methode mal gesetzt, was allerdings nicht in der Klasse Login geschieht!!!
 

cam

Bekanntes Mitglied
Ok, das kann ich nachvollziehen, dass cn null ist.

In Frame.java habe ich ja setCon() damit funktioniert dort auch getCon().

Code:
verb.setCon(DriverManager.getConnection("jdbc:sqlserver://localhost; databaseName = Lager; user = sa; password = xxx"));

Ich weiß aber nicht, was ich für Parameter in Login.java übergeben soll?
 

manuche

Bekanntes Mitglied
Folgender Vorschlag: Du verwendest das gleiche Objekt der Klasse Verbindung, welches du in der Frameklasse hast auch in der Klasse Login!
 

cam

Bekanntes Mitglied
Oh man, das gibt es doch nicht!!!!
Das hatte ich vorhin ausprobiert, aber versehentlich nur beim Benutzernamen und nicht beim Passwort und dadurch kam ja weiterhin die Fehlermeldung :oops:

Vielen vielen Dank!!!!!!

Jetzt noch eine allerletzte Frage dazu:

Ist das so mit den getter/setter richtig? Also soll ich das so durch das ganze Programm machen?
 

manuche

Bekanntes Mitglied
Das ist das Konzept von OO-Programmiersprachen... Nennt sich Information-Hiding! Der Zugriff geschieht über Getter- und Setter-Methoden!
Ausnahmen gibt es zwar auch allerdings solltest du damit erst anfangen wenn es wirklich nicht anders geht... Darfst uns dann aber fragen ob es wirklich nicht anders geht :D

Btw kannst du parameterisierte Konsturktoren verwenden...

Code:
public class Verbindung{
  private Connection cn;
  ...

  public Verbindung (Connection cn){
    this.cn = cn;
  } 

  ...
}
Dann brauchst du nur noch fogenden Aufruf:
Code:
Connectnon con = Class.forName(...);
Verbindung verb = new Verbindung (con);
statt
Code:
Connectnon con = Class.forName(...);
Verbindung verb = new Verbindung ();
ver.setCon (con);
 

cam

Bekanntes Mitglied
Ok, danke.

Na gut, eine Frage hab ich doch noch :wink:
Ich habe ja nun eine Menge Formulare in meinem Programm. Die habe ich alle in Frame.java angelegt. Die sind ja nun auch alle static, also Buttons usw.

Wäre es besser, die Teile alle in den jeweiligen Klassen anzulegen und nur dass jeweilige JInternalFrame an die JDesktopPane übergeben? (Geht das überhaupt? Der Gedanke kam mir nur gerade.)
 

manuche

Bekanntes Mitglied
Du brauchst dringend ein Einführung in Java bevor du mit JDesktopPanes und JInternalFrames anfängst... (nichts für ungut)
Es ist aber immer die bessere Variante auf static zu verzichten wenn es geht (und es geht fast immer)!
 

cam

Bekanntes Mitglied
Ja, hab ich auch gemerkt *seufz* Bin auch fleißig am Lesen und Probieren (schon seit Wochen), aber wie du und alle anderen ja seht, fehlt bei mir bei vielem das Verständnis.

Naja, ich hatte das Programm ja fast fertig, also meine Formulare stehen alle schon und zum größten Teil funktioniert das Programm auch, wollte es eben verbessern.

Also mache ich das nach dem gleichen Prinzip.
 

manuche

Bekanntes Mitglied
Ohne zu wissen was genau du unter Formularen verstehst und wie die in dein Programm eingebunden sind oder wie dein Programm letztendlich funktioniert...

...JA, unbedingt!
 

Ebenius

Top Contributor
Zum Lernen: Nimm Dir ein vernünftiges Java-Buch (ob online oder Papier ist egal) und lies das ganze Buch von vorn bis hinten. Mach alle Beispiele mit, auch die die zu einfach erscheinen. Mach nicht den Fehler, Seiten zu überblättern, weil Du Dinge schon kennst. Im Notfall liest Du halt einen langweiligen Teil mit, obwohl Du das Thema schon kennst, so what? Buch-Empfehlungen findest Du sicher über die Forensuche.

Viel Erfolg!
Ebenius
 

cam

Bekanntes Mitglied
Was übergibt man denn bei Buttons?

Code:
formsLogin.setBtAnmelden(???);

Code:
	public JButton getBtAnmelden() {
		return btAnmelden;
	}

	public void setBtAnmelden(JButton btAnmelden) {
		this.btAnmelden = btAnmelden;
	}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Getter/Setter - wie sieht ein Setter aus? Und wie nicht? Java Basics - Anfänger-Themen 34
W Getter/Setter Java Basics - Anfänger-Themen 4
KogoroMori21 Objektvariable anderer Klasse übernehmen, Getter/Setter Java Basics - Anfänger-Themen 11
T Verständnisfrage Objekt Getter Setter Java Basics - Anfänger-Themen 102
KogoroMori21 Getter und Setter Java Basics - Anfänger-Themen 5
S Klassen instanziieren und verwenden von Getter und Setter Java Basics - Anfänger-Themen 4
P Klasse hat keinen Zugriff auf getter/setter-Methoden eines Objektes Java Basics - Anfänger-Themen 9
V getter/setter Garage Java Basics - Anfänger-Themen 12
S getter, setter in abstrakter Klasse oder lieber Unterklassen Java Basics - Anfänger-Themen 4
topi Kapselung getter und setter Java Basics - Anfänger-Themen 5
D Setter/Getter für Instanzvariablen praktisch? Java Basics - Anfänger-Themen 19
S Getter/Setter - Variablenklasse ? Java Basics - Anfänger-Themen 5
S getter and setter Java Basics - Anfänger-Themen 12
L Getter und Setter Java Basics - Anfänger-Themen 2
M Generics getter und setter Methoden Java Basics - Anfänger-Themen 4
E Methoden Objekte in Methode aufrufen ohne getter und setter? Java Basics - Anfänger-Themen 1
L Klassen - Getter & Setter Methoden Java Basics - Anfänger-Themen 2
D Erste Schritte Java - Setter und Getter Java Basics - Anfänger-Themen 1
Z Getter/Setter NullPointer Exception Java Basics - Anfänger-Themen 6
K Klassen Setter/Getter Java Basics - Anfänger-Themen 3
F OOP Schleifen und Probleme mit Setter und Getter Java Basics - Anfänger-Themen 1
L Setter und Getter/Vererbung Java Basics - Anfänger-Themen 6
K Kapselung getter & setter Java Basics - Anfänger-Themen 11
J Frage zu Setter u. Getter Java Basics - Anfänger-Themen 7
T Variablen Getter-Setter vs Public Variable? Java Basics - Anfänger-Themen 5
Y Konstruktor - Setter/Getter Java Basics - Anfänger-Themen 3
N Klassen fragen zur getter und setter methode Java Basics - Anfänger-Themen 11
D Ab wann getter und setter Java Basics - Anfänger-Themen 2
K getter & setter Java Basics - Anfänger-Themen 6
C getter/setter Problem anscheinend Java Basics - Anfänger-Themen 13
G Erste Schritte Getter und Setter Java Basics - Anfänger-Themen 12
B Getter,Setter - Konstruktor überflüssig? Java Basics - Anfänger-Themen 26
N Sprite Methode (Getter, Setter, Konstruktor) Java Basics - Anfänger-Themen 9
S getter/setter aufrufen Java Basics - Anfänger-Themen 9
B Java getter/setter funktioniert nicht! Java Basics - Anfänger-Themen 7
X OOP Getter/Setter überschreiben den Wert ihrer Variablen nicht Java Basics - Anfänger-Themen 4
T Erste Schritte Verständnisfrage: Getter und Setter Methoden Java Basics - Anfänger-Themen 3
V public Variablen vs Getter + Setter Java Basics - Anfänger-Themen 4
F Getter und Setter Java Basics - Anfänger-Themen 4
lulas[]args getter/setter umstellung Java Basics - Anfänger-Themen 6
B Klassen Getter-Setter vor neuem Klassenaufruf - wie? Java Basics - Anfänger-Themen 20
N OOP Getter, Setter und andere Probleme Java Basics - Anfänger-Themen 8
A OOP Getter und Setter Java Basics - Anfänger-Themen 18
L Unterschied Konstruktor / Getter Setter Java Basics - Anfänger-Themen 13
L Setter und Getter für Arrays? Java Basics - Anfänger-Themen 4
N boolean bei Setter und getter methoden Java Basics - Anfänger-Themen 21
J Getter und Setter auch intern benutzen - guter Stil? Java Basics - Anfänger-Themen 31
Houly Setter/Getter MEthoden testen Java Basics - Anfänger-Themen 4
P OOP Getter&Setter Methoden funktionieren nicht Java Basics - Anfänger-Themen 7
H Setter-und-Getter-Konvention Java Basics - Anfänger-Themen 8
V Reflection API - getter und setter Java Basics - Anfänger-Themen 7
-horn- EINE setter/getter klasse aus mehreren klassen befüllen Java Basics - Anfänger-Themen 13
H Frage zu getter und setter Java Basics - Anfänger-Themen 5
S Unbenutzte/überflüssige Getter/Setter herausfinden? Java Basics - Anfänger-Themen 2
M getter/setter bei JTextField ? Java Basics - Anfänger-Themen 21
G warum Setter/Getter Java Basics - Anfänger-Themen 25
S In einer Liste auf getter und setter zugreifen Java Basics - Anfänger-Themen 6
Say Class scope und Instance scope und Getter nur selbstgeschrieben Methoden Java Basics - Anfänger-Themen 11
W Unterschiede bei Zugriff auf Objekt und Klassenvariablen über einen Getter? Java Basics - Anfänger-Themen 2
O Instanzattribut per Getter Methode zuweisbar, warum? Java Basics - Anfänger-Themen 8
P Klassenübergreifende Ausgabe mittels "getter" nicht möglich Java Basics - Anfänger-Themen 21
J Array über Getter erlangen Java Basics - Anfänger-Themen 34
M Getter einer PriorityQueue Java Basics - Anfänger-Themen 1
KopaCoda Getter mehrfach aufrufen -> ist das guter code? Java Basics - Anfänger-Themen 3
V Getter Methode Java Basics - Anfänger-Themen 38
T Extrahiertes Objekt durch Getter bekommen Java Basics - Anfänger-Themen 2
D Kapselung final Variablen mit Getter? Java Basics - Anfänger-Themen 2
A getter Java Basics - Anfänger-Themen 3
T Getter für Array Java Basics - Anfänger-Themen 4
J-Gallus Ein Getter bekommt eine anderen Type als er Return soll Java Basics - Anfänger-Themen 9
K Public Attribute oder getter - funktioniert leider beides hier nicht Java Basics - Anfänger-Themen 5
P getter Java Basics - Anfänger-Themen 1
M Getter Problematik mit ItemListener Java Basics - Anfänger-Themen 17
S Array und Getter-Methode Java Basics - Anfänger-Themen 2
Avarion Getter von Super-Klasse funktioniert nicht Java Basics - Anfänger-Themen 10
J Variable per Getter holen - wie ? Java Basics - Anfänger-Themen 2
D Getter Mehtode Unsicher Java Basics - Anfänger-Themen 6
M Problem mit getter, liefert nur alte Werte Java Basics - Anfänger-Themen 6
El_Lobo Methoden Zu viele Getter- und Settermethoden - geht das einfacher? Java Basics - Anfänger-Themen 3
G Generics kein Zugriff auf getter eines Objekts Java Basics - Anfänger-Themen 4
M OOP Aufruf vieler Getter Methoden abkürzen? Java Basics - Anfänger-Themen 7
MU5T4NG Getter und Setten bei GUI-Erstellung Java Basics - Anfänger-Themen 13
B Variablen keine Arrayübergabe für getter im Interface Java Basics - Anfänger-Themen 8
J int Wert mit getter holen und in String parsen Java Basics - Anfänger-Themen 5
O Universeller GETTER Java Basics - Anfänger-Themen 5
J Die Getter Methode Java Basics - Anfänger-Themen 6
E [Erledigt] Schöner Code zur Reduktion von unzähligen Getter-Methoden Java Basics - Anfänger-Themen 2
F 2 dimensionales Array getter Methode Java Basics - Anfänger-Themen 3
K Getter Java Basics - Anfänger-Themen 6
S JTextField in anderer Classe mit getter Methode auslesen. Java Basics - Anfänger-Themen 2
M if oder verschiedene getter Java Basics - Anfänger-Themen 31
I If / Else in Setter? Java Basics - Anfänger-Themen 8
M Methoden Zweidimensionaler Array mit Setter Methode ändern Java Basics - Anfänger-Themen 4
H Mit setter-Methode JLabel in einer andern Klasse ändern. Java Basics - Anfänger-Themen 40
C Setter-Methode mit final-Attribut Java Basics - Anfänger-Themen 9
M Gettter/Setter Methoden Klassenfelder kapselung und zugriff? Java Basics - Anfänger-Themen 1
JavaTalksToMe Kapselung Setter Frage Java Basics - Anfänger-Themen 15
kilopack15 Ist diese setter-Methode richtig? Java Basics - Anfänger-Themen 2
T setter im Konstruktor einbauen? Java Basics - Anfänger-Themen 8
F Setter Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben