NullPointerException

savvo

Mitglied
Hallo zusammen

Habe seit kurzem mit Java angefangen. Nun wollte ich eine GUI schreiben die sich mit einer MySQL Datenbank verbindet. Soweit eigentlich kein Problem, jedoch sobald ich mich verbinden will bekomme ich die Fehlermeldung NullPointerException :confused: . Könnte mir jemand helfen und mir mitteilen wo mein Fehler liegt?

Mein Programm besteht aus 3 Klassen:

main - Klasse
Code:
import javax.swing.*;

public class SalRosso implements Runnable{
 private Frame p_window;

 public static void main( String[] args ) {
  SwingUtilities.invokeLater(new SalRosso());
 }
 
 public void run() {
  this.p_window = new Frame();
  p_window.build();
 }
}

DB connector Klasse
Code:
import java.sql.*;

public class Connector {
 private Frame p_frame;
 private Connection con;
 
 public Connector(Frame p_frame) {
  this.p_frame = p_frame;
 }
 
 public void connect() {
  try {
   if(!(p_frame.database().equals(""))) {
    Class.forName("com.mysql.jdbc.Driver");
    con = DriverManager.getConnection("jdbc:mysql://localhost/"
      + p_frame.database(), p_frame.username(), p_frame.password());
    p_frame.info();
   }
   else {
    p_frame.dbWrong();
   }
  }
  catch (Exception ex) {
   p_frame.conTrouble();
  }
 }
 
 public void disconnect() {
  try {
   con.close();
  } 
  catch (Exception ex) {
   p_frame.dbNoDisc();
  }
 }
}

Frame Klasse
Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.SQLException;

public class Frame {
 private Connector p_conn;
 
 private JTabbedPane tab = new JTabbedPane();
 private JPanel mainPanel = new JPanel();
 
 private JButton connect = new JButton("Connect");
 private JButton close = new JButton("Close");
 
 private JTextField uname = new JTextField();
 private JTextField db = new JTextField();
 private JPasswordField pw = new JPasswordField();
 
 public void build() {
  JFrame.setDefaultLookAndFeelDecorated(true);
  JFrame window = new JFrame("DB Tool");
  window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  
  JMenuBar menuBar = new JMenuBar();
  menuBar.add(new JMenu("File")).add(new JMenuItem("Close"));
  window.setJMenuBar(menuBar);
  
  Container pane = window.getContentPane();
  
  pane.add(tab);
  
  mainPanel.setLayout( new GridLayout(4,2));
  ((JComponent) mainPanel).setBorder(BorderFactory.createEmptyBorder(30,30,30,30));
  mainPanel.add(new JLabel("Database: "));
  mainPanel.add(db);
  mainPanel.add(new JLabel("Username: "));
  mainPanel.add(uname);
  mainPanel.add(new JLabel("Password: "));
  mainPanel.add(pw);
  mainPanel.add(connect);
  mainPanel.add(close);
  
  tab.addTab("Connection", mainPanel);
  
  window.pack();
  window.setVisible(true);  
  
  connect.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
    p_conn.connect();
   }
  });
  
  close.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {
    System.exit(0);
   }
  });
 }
 
 /*
  * Messages
  */
 
 public void dbWrong() {
  JOptionPane.showMessageDialog(null, "Please enter a valid database name");
 }
 
 public void conTrouble() {
  JOptionPane.showMessageDialog(null, "Please check your data");
 }
 
 public void info() {
  JOptionPane.showMessageDialog(null, "You are connected with \""
    + database() + "\" as user \"" + username() + "\"");
 } 
 
 public void dbNoDisc() {
  JOptionPane.showMessageDialog(null, "Cannot close connection to database");
 }
 
 /*
  * get Strings
  */
 
 public String database() {
  return db.getText().toString();
 }
 
 public String username() {
  return uname.getText().toString();
 }
 
 public String password() {
  return pw.getText().toString();
 }
}

Besten Dank für Eure hilfe.

Gruss
Savvo
 
Wenn du uns eine aussagekräftige Fehlermeldung bringst können wir dir helfen.

Eine Zeilennummer wäre z.b recht hilfreich dann müssten wir nicht den ganzen code auf eventuelle NullPointer abchecken.
 
Hallo, sorry hab gar nicht daran gedacht. Hier ist die Meldung, danke.

java.lang.NullPointerException
at Frame$1.actionPerformed(Frame.java:60)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$ForwardActionEvents.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 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.pumpOneEventForHierarchy(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)
 
Hallo, hab den Fehler gefunden, war eigentlich ganz einfach. In der Klasse Frame fehlte folgender Eintrag:

Code:
private Connector p_conn = new Connector(this);
War ja doch nicht so schlimm
:-( :-( :-( :-( :-( :-( :-( :-( :-( :-( :-( :-( :-( :-( :-( :-(

Sorry für solche Themen und besten Dank für die gebotene Hilfe.

Grüsse und frohes neues Jahr.
Savvo
 
Zurück