# Null Pointer exception statement



## Sabrina2612 (8. Jun 2011)

Hallo Leute,

ich wollte meine Tballe mit Einträgen aus der Datenbank füllen und bekomme einen Fehler bei dem statement.
Hier der Code:


```
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.sql.Connection;
import java.sql.ResultSet;
import java.util.Vector;

import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JTable;

import DB.MySQL_Connection;

import com.cloudgarden.layout.AnchorConstraint;
import com.cloudgarden.layout.AnchorLayout;
import com.mysql.jdbc.ResultSetMetaData;
import com.mysql.jdbc.Statement;

public class FA_anzeigen extends JFrame {
	
	JComboBox Fach;
	JComboBox Vorlesung;
	//Verbindung
    //Statement z.B. SQL
    java.sql.Statement stmt;
    //Ergebnis Set
	ResultSet ergebnis;
	private JTable Anzeige;
	Connection conn;

	public FA_anzeigen() {
		
		//Fenster Informationen
		setTitle("*Fragen und Antworten anzeigen*");
		setVisible(true);
	    //Spaltennamen und Inhalte werden in Vektoren realisiert
		Vector<String> columnNames = new Vector<String>();
	    Vector<Vector> data = new Vector<Vector>();
		
		
		try {
			
			//AnchorLayout für variable Fenstereinstellung der Komponenten
			AnchorLayout thisLayout = new AnchorLayout();
			getContentPane().setLayout(thisLayout);
			{	
				String sql = "Select * from Kombi_FA";
				new DB.MySQL_Connection();
				conn = MySQL_Connection.getConn();
	        	stmt = conn.createStatement();
	        	ergebnis = stmt.executeQuery( sql );
	        	ResultSetMetaData md = (ResultSetMetaData) ergebnis.getMetaData();
	        	int columns = md.getColumnCount();
	        	
	        	// Lese und erzeuge die Spaltennamen
	        	for (int i = 1; i <= columns; i++) {
	        		columnNames.addElement( md.getColumnName(i) );
	        	}
	        	

	        	//Fülle die Zeilen und Spalten
	        	while (ergebnis.next()) {
	        		Vector<Object> row = new Vector<Object>(columns);
	        		for (int i = 1; i <= columns; i++) {
	        			row.addElement( ergebnis.getObject(i) );
	        		}
	        		data.addElement( row );
	        	}
				Anzeige = new JTable(data, columnNames);
				getContentPane().add(Anzeige, new AnchorConstraint(184, 846, 882, 109, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				Anzeige.setPreferredSize(new java.awt.Dimension(325, 240));
			}

			{
				//Auswahl Fach
				ComboBoxModel FachModel = 
					new DefaultComboBoxModel(
							new String[] { "Fach" });
				Fach = new JComboBox();
				getContentPane().add(Fach, new AnchorConstraint(1, 502, 103, 28, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				Fach.setModel(FachModel);
				Fach.setPreferredSize(new java.awt.Dimension(209, 35));
			    Fach.addItemListener( new ItemListener() {
			        public void itemStateChanged( ItemEvent e ) {
			          JComboBox selectedChoice = (JComboBox)e.getSource();
			          if ( selectedChoice.getSelectedItem().equals("Ende") )
			            System.exit( 0 );
			        }
			      } );
			}

			{
				//Auswahl Vorlesung
				ComboBoxModel VorlesungModel = 
					new DefaultComboBoxModel(
							new String[] { "Vorlesung" });
				Vorlesung = new JComboBox();
				getContentPane().add(Vorlesung, new AnchorConstraint(1, 973, 103, 502, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL, AnchorConstraint.ANCHOR_REL));
				Vorlesung.setModel(VorlesungModel);
				Vorlesung.setPreferredSize(new java.awt.Dimension(208, 35));
			    Vorlesung.addItemListener( new ItemListener() {
			        public void itemStateChanged( ItemEvent e ) {
			          JComboBox selectedChoice = (JComboBox)e.getSource();
			          if ( selectedChoice.getSelectedItem().equals("Ende") )
			            System.exit( 0 );
			        }
			      } );
				
			}
			
			{
				this.setSize(451, 374);
			}
		} catch(Exception e) {
			e.printStackTrace();
		}
	}

}
```

Fehler zeigt auf zeile 53.


----------



## tfa (8. Jun 2011)

Und der Fehler ist geheim?


----------



## Sabrina2612 (8. Jun 2011)

Sorry Fehler sind folgende:

java.lang.NullPointerException
	at FA_anzeigen.<init>(FA_anzeigen.java:65)
	at clicker.actionPerformed(clicker.java:186)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2012)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2335)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:404)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
	at javax.swing.AbstractButton.doClick(AbstractButton.java:374)
	at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:829)
	at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:873)
	at java.awt.Component.processMouseEvent(Component.java:6203)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
	at java.awt.Component.processEvent(Component.java:5968)
	at java.awt.Container.processEvent(Container.java:2105)
	at java.awt.Component.dispatchEventImpl(Component.java:4564)
	at java.awt.Container.dispatchEventImpl(Container.java:2163)
	at java.awt.Component.dispatchEvent(Component.java:4390)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4461)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4125)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4055)
	at java.awt.Container.dispatchEventImpl(Container.java:2149)
	at java.awt.Window.dispatchEventImpl(Window.java:2478)
	at java.awt.Component.dispatchEvent(Component.java:4390)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:649)
	at java.awt.EventQueue.access$000(EventQueue.java:96)
	at java.awt.EventQueue$1.run(EventQueue.java:608)
	at java.awt.EventQueue$1.run(EventQueue.java:606)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:105)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:116)
	at java.awt.EventQueue$2.run(EventQueue.java:622)
	at java.awt.EventQueue$2.run(EventQueue.java:620)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:105)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:619)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:138)


----------



## tfa (8. Jun 2011)

Meinst du Zeile 65 oder 53? In der Exception steht 65. 
Irgendwo greifst du jedenfalls auf eine Null-Referenz zu, was zu der NPEx führt.


----------



## Sabrina2612 (8. Jun 2011)

Dann ist hier anscheinend doch Zeile 51 gemeint. Habe ein paar zeilen rausgenommen somit hat sich das gekürzt.


----------



## Michael... (8. Jun 2011)

Sabrina2612 hat gesagt.:


> Dann ist hier anscheinend doch Zeile 51 gemeint. Habe ein paar zeilen rausgenommen somit hat sich das gekürzt.



Dann ist wohl conn null ==> Fehler beim Verbindungsaufbau zur Datenbank. Wie sieht den der Code zum Verbindungsaufbau aus? Werden da Exceptions abgefangen aber nicht ausgegeben?


----------



## Sabrina2612 (8. Jun 2011)

Das is die Klasse zum Verbindungsaufbau:


```
package DB;
import java.sql.*; 

import com.mysql.jdbc.Statement;
 
public class MySQL_Connection {
    
    final static String hostname = "localhost"; 
    final static String port = "3307"; 
    final static String dbname = "clicker"; 
    final static String user = "sabrina"; 
    final static String password = "JSjp2pcXR7uFYC8u"; 
    public static Connection conn = null; 
  

	public static void Treiber(){
        try { 
        	System.out.println("* Treiber laden"); 
            Class.forName("org.gjt.mm.mysql.Driver").newInstance(); 
        } 
        catch (Exception e) { 
        	System.err.println("Unable to load driver."); 
            e.printStackTrace(); 
        } 
    }
    
    public static Connection Verbindung_Start(){
        try { 
        	System.out.println("* Verbindung aufbauen"); 
            String url = "jdbc:mysql://"+hostname+":"+port+"/"+dbname; 
            conn = DriverManager.getConnection(url, user, password); 
        }
        catch (Exception e) { 
            System.err.println("Unable to connect."); 
            e.printStackTrace(); 
        } 
        return conn;
    }
    
    public static void Verbindung_Ende(){
        try {
        	System.out.println("* Verbindung geschlossen"); 
        } 
        catch (Exception e) { 
            System.err.println("Unable to close."); 
            e.printStackTrace(); 
        } 
    }
    

	public static void setConn(Connection conn) {
		MySQL_Connection.conn = conn;
		try {
			conn = DriverManager.getConnection(hostname, user, password);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
	}
    
    public static Connection getConn() {
		return conn;
	}
	
    public static void main(String[] args) { 
    
    	Treiber();
    	Verbindung_Start();
    	Verbindung_Ende();
    	
    }

        
}
```

Ich wollte dann das conn  aus dieser Klasse benutzen habe es auch versucht mit stmt = DB.MySQL_Connection.conn.createStatement()
Hat aber leider damit auch die selben Fehler ausgegeben. In anderen Klassen ging es so zu benutzen.


----------



## Michael... (8. Jun 2011)

Merkwürdiges Vorgehen. Das 
	
	
	
	





```
new DB.MySQL_Connection();
```
 in der Klasse FA_anzeigen ist überflüssig bzw. bewirkt nichts. Eine Verbindung zur Datenbank wird gar nicht aufgebaut, also liefert 
	
	
	
	





```
MySQL_Connection.getConn();
```
 null zurück. Zum Verbindungsaufbau müssten ja die Methoden 
	
	
	
	





```
Treiber();
```
 und 
	
	
	
	





```
Verbindung_Start();
```
 aufgerufen werden.
(Üblicherweise beginnen Methodennamen mit einen kleinBuchstaben und beschreiben deren Funktion, z.B. ladeTreiber() oder starteVerbindung() - siehe Java Coding Conventions)


----------



## Sabrina2612 (8. Jun 2011)

Klar danke oh mann manchmal sieht man die einfachsten sachen nich -.- Das hab ich ja bei anderen Klassen auch so gemacht


----------

