Compiler-Fehler NullpointerException!

  • Themenstarter Themenstarter TheDirtyPanda
  • Beginndatum Beginndatum
T

TheDirtyPanda

Gast
Moinsen,

ich habe folgendes Problem: momentan bekomme ich immer die NullPointerException, wenn ich immer ein neues Objekt von einer Klasse erzeuge. Eigentlich sollte diese aber nicht null sein. Ich habe schon gegooglt aber irgendwie komme ich gerade nicht weiter.

Hier einmal mein Code:

Die Main-Klasse:
Java:
package application;

import application.controllers.UserController;

public class Main {

	public static void main(String[] args) {
		UserController usercontroller = new UserController();
	}

}

Die der User-Controller:

Java:
package application.controllers;

import application.dao.UserDAO;
import application.models.User;

public class UserController {
	
	private UserDAO userdao;
	private User user;
	
	public UserController() {
		user = new User(0,"Elefant","elefant","elefant@elefant.de");
		
		userdao.createUser(user);
		userdao.getAllUsers();
	}
}

Die User-Klasse:
Java:
package application.models;

public class User {
	
	private int id_user;
	private String username;
	private String catchword;
	private String email;
	
	public User(int id_user, String username, String catchword, String email) {
		this.id_user = id_user;
		this.username = username;
		this.catchword = catchword;
		this.email = email;
	}
	
	public void setId_user(int id_user) {
		this.id_user = id_user;
	}
	
	public int getId_user() {
		return this.id_user;
	}
	
	public void setUsername(String username) {
		this.username = username;
	}
	
	public String getUsername() {
		return this.username;
	}
	
	public void setCatchword(String catchword) {
		this.catchword = catchword;
	}
	
	public String getCatchword() {
		return this.catchword;
	}
	
	public void setEmail(String email) {
		this.email = email;
	}
	
	public String getEmail() {
		return this.email;
	}
}

Und den User-DAO:

Java:
package application.dao;

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

import application.interfaces.UserInterface;
import application.models.User;

public class UserDAO implements UserInterface {

	Connection connection = null;
	Statement statement = null;
	ResultSet resultset = null;
	
	@Override
	public void setConnectionToDatabase() {
		
		String host = "jdbc:mysql://localhost/";
		String dbname = "anwendung";
		String username = "root";
		String password = "";
			
		String url = host + dbname + "?user=" + username + "&password=" + password;
			
		try {
			Class.forName("com.mysql.jdbc.Driver");
			connection = DriverManager.getConnection(url);
			System.out.println("Sucess!");
		} catch(ClassNotFoundException e) {
			System.out.println("Class not found!");
			e.printStackTrace();
		} catch(SQLException e) {
			System.out.println("SQL Exception!");
			e.printStackTrace();
		}
		
	}

	@Override
	public void getAllUsers() {
		
		try {
			statement = connection.createStatement();
			resultset = statement.executeQuery("SELECT * FROM users");
			
			while(resultset.next()) {
				System.out.println("ID: " + resultset.getInt(1));
				System.out.println("Username: " + resultset.getString(2));
				System.out.println("Catchword: " + resultset.getString(3));
				System.out.println("Email: " + resultset.getString(4));
			}

		} catch(SQLException e) {
			System.out.println("Es ist ein Fehler ausgetreten: ");
			e.printStackTrace();
		}
		
	}

	@Override
	public void createUser(User user) {
		
		try {
			PreparedStatement pst = connection.prepareStatement("INSERT INTO users (id_user, username, catchword, email) VALUES (?,?,?,?)");
			
			pst.setInt(1, user.getId_user());
			pst.setString(2, user.getUsername());
			pst.setString(3, user.getCatchword());
			pst.setString(4, user.getEmail());
			
			pst.executeUpdate();
			
		} catch(SQLException e) {
			e.printStackTrace();
		}
		
	}

}

Ich verstehe es momentan nicht mehr - eigentlich müsste der User ja gefüllt sein .... Naja als Fehlermeldung bekomme ich folgendes:

Code:
Exception in thread "main" java.lang.NullPointerException
	at application.controllers.UserController.<init>(UserController.java:14)
	at application.Main.main(Main.java:8)

Vielleicht könnt ihr mir dabei weiter helfen!

mit freundlichen Grüßen,

TheDirtyPanda
 
Du rufst die Methode .createUser(user); auf dem UserDAO-Objekt userdao auf, initialisierst dieses aber nirgends. Folglich ist userdao zu diesem Zeitpunkt natürlich immer noch null
 
Ja ich wusste nicht so recht unter welchen Präfix ich es sonst angeben sollte - entschuldigt! Dann werde ich mal den UserDAO initialisieren ... danke für eure schnelle Antwort 🙂
 
Ich habe auch eine ernstgemeinte Frage: Wo genau sind die Schwierigkeiten sowas sebständig zu analysieren?

Ich möchte das wirklich wissen, um ggf. einen Artikel schreiben zu können, um zukünftig solche Fragen schneller beantworten zu können oder eben die Hintergründe ... Keine Ahnung..
 
Man hat sowas einfach nicht auf dem Zettel. Wenn man erfahrener ist, dann fängt der Code an zu dir zu sprechen aber am Anfang noch nicht und dann passiert sowas.

Zum Anderen ist es Unkenntnis der Analysewerkzeuge (Debugger, Sysouts) und ihrer Anwendung.

Und Faulheit spielt manchmal (nicht immer) auch eine Rolle.


Das wären jetzt die Gründe, die mir einfielen.
 
Also bei mir ist es so, irgendwann sieht man seine eigenen Fehler einfach nicht - ich arbeite den ganzen Tag mit Java und ab und an meistens am Ende des Tages sieht man einfach die kleinsten Fehler nicht. Dann ist es hilfreich wenn andere Menschen (von außen) auf den Code blicken.

So ist es jedenfalls bei mir. Natürlich hat es auch mit Erfahrung zutun.

EDIT: Es wäre auch intelligenter von mir gewesen, hätte ich nicht einfach die Methode setConnectionToDatabase() aufgerufen. Ohne die funktioniert es nicht :O 😳 Oh man 😀 Kann man das Thema irgendwo schließen?
 
Zuletzt bearbeitet von einem Moderator:
Oft scheint es, dass die Fragesteller unwillig (oder unfähig) sind, den Stacktrace einer Exception zu lesen/interpretieren.
Dabei steht dort doch die Zeilennummer, die das Problem verursacht, sowie die Art des Problems.

Dabei ist Java gerade bei Fehlermeldungen sehr viel angenehmer als viele andere Sprachen...
 

Zurück
Oben