0
votes

I am using Java8 and I am trying to move from one frame to another using the code.

Problems: The first JPanel doesn't close Second JPanel gives error when I try to close the window

Error msg:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at ex2.Main2$2.actionPerformed(Main2.java:60) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) at java.awt.Component.processMouseEvent(Component.java:6539) at javax.swing.JComponent.processMouseEvent(JComponent.java:3324) at java.awt.Component.processEvent(Component.java:6304) at java.awt.Container.processEvent(Container.java:2239) at java.awt.Component.dispatchEventImpl(Component.java:4889) at java.awt.Container.dispatchEventImpl(Container.java:2297) at java.awt.Component.dispatchEvent(Component.java:4711) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476) at java.awt.Container.dispatchEventImpl(Container.java:2283) at java.awt.Window.dispatchEventImpl(Window.java:2746) at java.awt.Component.dispatchEvent(Component.java:4711) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760) at java.awt.EventQueue.access$500(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.awt.EventQueue$3.run(EventQueue.java:703) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84) at java.awt.EventQueue$4.run(EventQueue.java:733) at java.awt.EventQueue$4.run(EventQueue.java:731) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74) at java.awt.EventQueue.dispatchEvent(EventQueue.java:730) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

Help Please.

first frame:

public class ex2 {

    private JFrame frmLogin;
    private JTextField textField;
    private JPasswordField passwordField;

//cuted the methods to start the frame

    private void initialize() {
        frmLogin = new JFrame();
        frmLogin.getContentPane().setFont(new Font("Dialog", Font.BOLD, 18));
        frmLogin.setTitle("Login");
        frmLogin.setBounds(100, 100, 400, 300);
        frmLogin.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frmLogin.getContentPane().setLayout(null);

        JLabel lblUserName = new JLabel("Username");
        lblUserName.setBounds(130, 40, 150, 15);
        lblUserName.setFont(new Font("Dialog", Font.BOLD, 18)); 
        frmLogin.getContentPane().add(lblUserName);

        JLabel lblPassword = new JLabel("Password");
        lblPassword.setBounds(130, 100, 150, 15);
        lblPassword.setFont(new Font("Dialog", Font.BOLD, 18));
        frmLogin.getContentPane().add(lblPassword);

        textField = new JTextField();
        textField.setBounds(130, 70, 150, 19);
        textField.setFont(new Font("Dialog", Font.BOLD, 18));
        frmLogin.getContentPane().add(textField);
        textField.setColumns(10);

        passwordField = new JPasswordField();
        passwordField.setBounds(130, 130, 150, 19);
        passwordField.setFont(new Font("Dialog", Font.BOLD, 18));
        frmLogin.getContentPane().add(passwordField);

        JButton btnLogin = new JButton("Login");
        btnLogin.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                String user = textField.getText();
                String pass = String.copyValueOf(passwordField.getPassword());

                if (user.equals("Rod") && pass.equals("123")) {
                    Main2 segundo = new Main2();

                    segundo.setVisible(true);
                    ex2.setVisible(false);

                }
            }
        });
        btnLogin.setBounds(130, 190, 150, 25);
        btnLogin.setFont(new Font("Dialog", Font.BOLD, 18));
        frmLogin.getContentPane().add(btnLogin);

}

Second frame

public class Main2 extends JFrame {

    private JPanel contentPane;
    private static Main2 frame2;

    public Main2() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 400, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        JLabel lblEntramos = new JLabel("Entramos");
        lblEntramos.setFont(new Font("Dialog", Font.BOLD, 22));
        lblEntramos.setBounds(150, 100, 200, 15);
        contentPane.add(lblEntramos);

        JButton btnSair = new JButton("Sair");
        btnSair.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {             
                frame2.setVisible(false);
            }
        });     
        btnSair.setBounds(125, 175, 150, 25);
        contentPane.add(btnSair);           
    }
}
1
When you post to Stack Overflow complaining about some error, it's helpful to include the error message. Please edit your question to include the error message and provide details on what Main2, ex2 and frame2 are. You suggest that they are JPanel, but you've named them in a way that suggests that they are JFrame.MarsAtomic
1) See The Use of Multiple JFrames, Good/Bad Practice? 2) For better help sooner, edit to add a minimal reproducible example or Short, Self Contained, Correct Example. 3) Always copy/paste error and exception output!Andrew Thompson
How do you close a JPanel?Abra
It appears you are trying to write a Swing application that first displays a "login" dialog and after the user successfully logs in, the application should close the login dialog and display the "main" application window. Is this correct?Abra

1 Answers

0
votes

I reproduced your Login form using the following code and I am not getting any errors..

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;

public class ex3 extends JFrame {

    public JPanel contentPane;
    private JTextField textField;
    private JPasswordField passwordField;


    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    ex3 frame = new ex3();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public ex3() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);



        JLabel lblUserName = new JLabel("Username");
        lblUserName.setBounds(130, 40, 150, 15);
        lblUserName.setFont(new Font("Dialog", Font.BOLD, 18));
        contentPane.add(lblUserName);

        JLabel lblPassword = new JLabel("Password");
        lblPassword.setBounds(130, 100, 150, 15);
        lblPassword.setFont(new Font("Dialog", Font.BOLD, 18));
        contentPane.add(lblPassword);

        textField = new JTextField();
        textField.setBounds(130, 70, 150, 19);
        textField.setFont(new Font("Dialog", Font.BOLD, 18));
        contentPane.add(textField);
        textField.setColumns(10);

        passwordField = new JPasswordField();
        passwordField.setBounds(130, 130, 150, 19);
        passwordField.setFont(new Font("Dialog", Font.BOLD, 18));
        contentPane.add(passwordField);

        JButton btnLogin = new JButton("Login");
        btnLogin.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                String user = textField.getText();
                String pass = String.copyValueOf(passwordField.getPassword());

                if (user.equals("Rod") && pass.equals("123")) {
                    Main2 segundo = new Main2();

                    segundo.setVisible(true);
                    setVisible(false);

                }
            }
        });
        btnLogin.setBounds(5, 196, 424, 60);
        btnLogin.setFont(new Font("Dialog", Font.BOLD, 18));
        contentPane.add(btnLogin);
    }

}

Are you sure you didn`t make any mistakes in the form code you "cuted" out?