Note that there are some explanatory texts on larger screens.

plurals
  1. POJava MVC DAO implementation getting NullPointerException error
    primarykey
    data
    text
    <p>I'm trying to learn how to do MVC and DAO but my implementation is failing right now and I can't get around it.</p> <p>Here is my view, or the relevant parts of it: </p> <pre><code>package gui; import javax.swing.JFrame; public class LoginFrame{ private JPanel contentPane; private final JLabel credentialsLabel = new JLabel("Credentials"); private JTextField usernameField; private JPasswordField passwordField; private JButton btnLogin; /** * Create the frame. */ public LoginFrame() { createAndShowGUI(); } private void createAndShowGUI() { EventQueue.invokeLater(new Runnable() { public void run() { try { JFrame frame = new JFrame(); frame.setTitle("Login"); frame.setContentPane(createContentPane()); frame.setBounds(100, 100, 480, 237); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } //A function that sets up the basic structure of the GUI. private JPanel createContentPane() { contentPane = new JPanel(); contentPane.setForeground(Color.LIGHT_GRAY); contentPane.setBackground(Color.DARK_GRAY); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); GridBagLayout gbl_contentPane = new GridBagLayout(); gbl_contentPane.columnWidths = new int[]{106, 0, 0, 153, 0}; gbl_contentPane.rowHeights = new int[]{65, 27, 39, 36, 0, 0}; gbl_contentPane.columnWeights = new double[]{0.0, 0.0, 0.0, 1.0, Double.MIN_VALUE}; gbl_contentPane.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE}; contentPane.setLayout(gbl_contentPane); //login button btnLogin = new JButton("login"); GridBagConstraints gbc_btnLogin = new GridBagConstraints(); gbc_btnLogin.anchor = GridBagConstraints.WEST; gbc_btnLogin.insets = new Insets(0, 0, 5, 5); gbc_btnLogin.gridx = 2; gbc_btnLogin.gridy = 3; contentPane.add(btnLogin, gbc_btnLogin); //register button JButton btnRegister = new JButton("register"); btnRegister.setFont(new Font("Helvetica", Font.PLAIN, 13)); GridBagConstraints gbc_btnRegister = new GridBagConstraints(); gbc_btnRegister.anchor = GridBagConstraints.WEST; gbc_btnRegister.insets = new Insets(0, 0, 5, 0); gbc_btnRegister.gridx = 3; gbc_btnRegister.gridy = 3; contentPane.add(btnRegister, gbc_btnRegister); return contentPane; } //the Action Listener for the Login Button passed by controller public void buttonActionListeners(ActionListener al) { btnLogin.setActionCommand("login"); btnLogin.addActionListener(al); } } </code></pre> <p>My Model: </p> <pre><code>package functions; import database.LoginDAO; public class LoginModel { LoginDAO logindao; public LoginModel(LoginDAO logindao){ this.logindao = logindao; } public void attemptLogin(String username, char[] password) { System.out.println("Testing login attempt"); logindao.attemptLogin(username, password); } } </code></pre> <p>My controller:</p> <pre><code>package controller; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import functions.LoginModel; import gui.LoginFrame; public class LoginControl implements ActionListener { LoginModel model; LoginFrame view; public LoginControl(LoginModel model, LoginFrame view){ this.model = model; this.view = view; //add action listener from control to view. view.buttonActionListeners(this); } //action performed by view public void actionPerformed(ActionEvent ae) { System.out.println("Testing Action Performed"); String action = ae.getActionCommand(); if(action.equals("login")){ System.out.println("Testing Action Performed"); model.attemptLogin(view.getUsername(),view.getPassword()); } } } </code></pre> <p>Main: </p> <pre><code>import functions.LoginModel; import java.io.IOException; import java.sql.SQLException; import controller.LoginControl; import database.LoginDAO; import gui.LoginFrame; public class Main { public static void main(String[] args) throws IOException, SQLException { LoginFrame frame = new LoginFrame(); LoginDAO loginDao = new LoginDAO(); LoginModel model = new LoginModel(loginDao); LoginControl controller = new LoginControl(model, frame); } } </code></pre> <p>The Error: </p> <pre><code>Exception in thread "main" java.lang.NullPointerException at gui.LoginFrame.buttonActionListeners(LoginFrame.java:160) at controller.LoginControl.&lt;init&gt;(LoginControl.java:16) at Main.main(Main.java:14) </code></pre> <p>The lines that the error references: </p> <pre><code>btnLogin.setActionCommand("login"); //in View view.buttonActionListeners(this); //in Control LoginControl controller = new LoginControl(model, frame); //in main. </code></pre> <p>So from what I've tried to understand: view.buttonActionListeners(this); somewhere in here I'm passing a null, so either this is null or view is null? how can view be null if we initiated LoginFrame view; </p> <p>Thanks for helping me solve this bug. </p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload