Как вернуться к моему экрану входа?

Моя программа написана на Java с использованием Eclipse, и моя программа сначала вам нужно ввести свое имя пользователя и пароль на сервер, и после проверки вы переходите на новую страницу (фрейм), где у меня есть JMenuBar, JMenu, и JMenuItem. JMenuItem, над которым я работаю, называется «Выход из системы» в разделе «Выход из JMenu», когда вы нажимаете на выход в данный момент, он закрывает экран. Я хочу, чтобы меня перенаправили обратно на страницу входа. Я пробовал много функций, но ни одна из них не работала. Буду признателен за помощь.

Вот моя программа:

public class ScanTest2 extends JFrame {

/**
 * 
 */
private static final long serialVersionUID = 1L;
private static LoginDialog loginDialog;

public ScanTest2() {
    loginDialog = new LoginDialog(this, true);
    loginDialog.setVisible(true);
}

public static void main(String[] args) 
{
    SwingUtilities.invokeLater(new Runnable() 
    { 

        public void run() 
        {
            // create new frame for new page
            JFrame frame = new ScanTest2();

            //create a Menu bar
            JMenuBar menuBar = new JMenuBar();

            frame.getContentPane().setBackground(Color.BLUE);
            try {
                frame.setContentPane(new JLabel(new ImageIcon(ImageIO.read(new File("/home/a002384/logo2.bmp")))));

            } catch (IOException e) {

                e.printStackTrace();
            }
            frame.setTitle("Scan Gun Information");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setLocationRelativeTo(null);
            frame.setExtendedState(JFrame.MAXIMIZED_BOTH);

            // create Menus
            JMenu databaseMenu = new JMenu("Database");
            JMenu ticketMenu = new JMenu("Tickets");
            JMenu inquiriesMenu = new JMenu("Inquiries");
            JMenu reportsMenu = new JMenu("Reports");
            JMenu exitMenu = new JMenu("Exit");

            // create Menu Items
            JMenuItem lotMenuItem = new JMenuItem("Lots");
                lotMenuItem.setMnemonic(KeyEvent.VK_L);
                lotMenuItem.setActionCommand("Lots");
            JMenuItem gunMenuItem = new JMenuItem("Guns");
                gunMenuItem.setMnemonic(KeyEvent.VK_G);
                gunMenuItem.setActionCommand("Guns");
            JMenuItem batteryMenuItem = new JMenuItem("Batteries");
                batteryMenuItem.setMnemonic(KeyEvent.VK_B);
                batteryMenuItem.setActionCommand("Batteries");
            JMenuItem logoutMenuItem = new JMenuItem("Logout");
                logoutMenuItem.setMnemonic(KeyEvent.VK_L);
                logoutMenuItem.setActionCommand("Logout");


            MenuItemListener menuItemListener = new MenuItemListener();
            lotMenuItem.addActionListener(menuItemListener);
            gunMenuItem.addActionListener(menuItemListener);
            batteryMenuItem.addActionListener(menuItemListener);
            logoutMenuItem.addActionListener(menuItemListener);

            // add Menu Items to Menus
            databaseMenu.add(lotMenuItem);
            databaseMenu.add(gunMenuItem);
            databaseMenu.add(batteryMenuItem);
            exitMenu.add(logoutMenuItem);

            // add menu to MenuBar
            menuBar.add(databaseMenu);
            menuBar.add(ticketMenu);
            menuBar.add(inquiriesMenu);
            menuBar.add(reportsMenu);
            menuBar.add(exitMenu);

            frame.setJMenuBar(menuBar);
            frame.setVisible(true);

        } // end of run method

        class MenuItemListener implements ActionListener {

            public void actionPerformed(ActionEvent e) {
                String command = e.getActionCommand();
                if (command.equals("Logout"))
                    System.exit(0);
                    // go back to login screen

            }   
        }
    }); // end of Runnable
}// end of Main
}

class LoginDialog extends JDialog {

/**
 * 
 */
private static final long serialVersionUID = 1L;

private final JLabel loginlbl = new JLabel("Username");
private final JLabel Passwordlbl = new JLabel("Password");

private final JTextField loginName = new JTextField(15);
private final JPasswordField loginPassword = new JPasswordField();

private final JButton loginButton = new JButton("Login");
private final JButton cancelButton = new JButton("Cancel");

private final JLabel Status = new JLabel(" ");

private String username;
private String password;

private int m_errCounter = 0;

public static final int MAX_LOGIN_ATTEMPTS = 3;

public LoginDialog() {
    this(null, true);
}

public LoginDialog(final JFrame parent, boolean modal) {
    super(parent, modal);

    JPanel p3 = new JPanel(new GridLayout(2, 1));
    p3.add(loginlbl);
    p3.add(Passwordlbl);

    JPanel p4 = new JPanel(new GridLayout(2, 1));
    p4.add(loginName);
    p4.add(loginPassword);

    JPanel p1 = new JPanel();
    p1.add(p3);
    p1.add(p4);

    JPanel p2 = new JPanel();
    p2.add(loginButton);
    p2.add(cancelButton);

    JPanel p5 = new JPanel(new BorderLayout());
    p5.add(p2, BorderLayout.CENTER);
    p5.add(Status, BorderLayout.NORTH);
    Status.setForeground(Color.RED);
    Status.setHorizontalAlignment(SwingConstants.CENTER);

    setLayout(new BorderLayout());
    add(p1, BorderLayout.CENTER);
    add(p5, BorderLayout.SOUTH);
    pack();
    setLocationRelativeTo(null);
    setDefaultCloseOperation(DISPOSE_ON_CLOSE);

    loginPassword.enableInputMethods(true);

    addWindowListener(new WindowAdapter() {  

        public void windowClosing(WindowEvent e) {  
            System.exit(0);  
        }  
    });

    loginButton.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {

            UniJava uJava = new UniJava();
            try {
                    username = loginName.getText();
                    password = new String (loginPassword.getPassword());
                    if (username == " " && password == " ") 
                    {
                        Status.setText("Invalid username or password!");
                    } 
                    else 
                    {
                        UniSession session = uJava.openSession();
                        session.setHostName("docdbtst.starcalif.com");
                        session.setUserName(username);
                        session.setPassword(password);
                        session.setAccountPath("/mnt/data1/DD");
                        session.connect();
                        parent.setVisible(true);
                        setVisible(false);
                    }

            } catch (UniSessionException e1) {

                if (++m_errCounter > MAX_LOGIN_ATTEMPTS)
                {
                    JOptionPane.showMessageDialog(LoginDialog.this, 
                            "All Login attempts failed!", 
                            "Error", JOptionPane.ERROR_MESSAGE);
                    System.exit(1);
                }
                else
                {
                    Status.setText("Invalid Login! Cannot Connect!");
                    loginName.setText("");
                    loginPassword.setText("");
                }

                e1.printStackTrace();
            }

        }   
    });
    cancelButton.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {
            setVisible(false);
            parent.dispose();
            System.exit(0);
        }
    }); 
  } 
}

person c.torres    schedule 01.10.2014    source источник
comment
Из того, что я вижу, после успешного входа в систему вы устанавливаете setVisible(false) в диалоговом окне входа, что означает, что он все еще находится в фоновом режиме, просто невидим. Если это так, просто используйте setVisible(true), когда захотите вернуться на эту страницу. Обратите внимание, что это сохранит состояние диалогового окна, поскольку оно не было воссоздано, а просто повторно показано.   -  person user1803551    schedule 01.10.2014
comment
Я бы избавился от входа в систему JPanel после проверки учетных данных, а не просто скрыл их. Технически проблема безопасности. Я бы рекомендовал создать новый экземпляр при выходе из системы.   -  person Compass    schedule 01.10.2014
comment
@Compass Как мне пройти этот маршрут?   -  person c.torres    schedule 01.10.2014
comment
@c.torres Аналогично ответу, который Джейк дал ниже. Когда вы входите в систему, вы должны избавиться от экрана входа вместо setVisible(false).   -  person Compass    schedule 01.10.2014


Ответы (1)


System.exit() все будет очищено JFrame.dispose() vs System.exit()

logoutItem.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            f.dispose();
            // northInformation.removeAll();
            // init();
            LoginWindow login = new LoginWindow();
        }
    });
person Jake Huang    schedule 01.10.2014
comment
Как я должен сделать это в моей программе тогда? - person c.torres; 01.10.2014
comment
Измените System.exit(0) на f.dispose(), f — это окно, которое вы хотите закрыть. - person Jake Huang; 01.10.2014