0

我正在尝试实现以下目标:显示登录窗口,然后从工厂确定GUIclass要打开的内容(例如admin/ dev/ tester)。

我无法弹出第二个窗口;我尝试使用 dispose 它关闭程序但不运行主程序到最后。

主要的:

public static void main(String[] args){
        LoginGui loginGuiWindow = null;
        DeveloperGui devGui = null;
        TesterGui tesGui = null;
        UserCntrl uc = new UserCntrl();
        try {
            loginGuiWindow = new LoginGui(uc);
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.print("Checking instance of: ");
        if(loginGuiWindow.loggingResult > 0){
            System.out.print("Checking instance of: ");
            if (uc.user instanceof Developer) {
                System.out.println("is instanceOf developer");
                devGui = new DeveloperGui(uc);
            }
            if (uc.user instanceof Tester ) {
                System.out.println("is instanceOf tester");
                tesGui = new TesterGui(uc);
            }
        }
    }

登录界面:

btnNewButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                int res;
                String nick = textUser.getText();
                String pass = textPassword.getText();
                if((res = uc.handleLogin(nick, pass)) > 0){
                    loggingResult = res;
                    uc.handleUi(res);
                    frame.setVisible(false);
                    frame.dispose();
                }
                else{
                    JOptionPane.showMessageDialog(frame,
                        "Wrong username or password.",
                        "Logging error",
                        JOptionPane.PLAIN_MESSAGE);
                }
            }
        });
4

2 回答 2

2

当您显示窗口时,它不是阻塞调用,请在显示之前尝试 setModal(true)

于 2013-04-23T14:41:51.040 回答
1

确保 LoginGui 的对话框是模态的。

如果不是,控制将在使其可见后返回到您的原始方法。loggingResult 永远不会 > 0,因此“检查实例”永远不会运行。然后,当用户最终登录时,该代码已经运行,并且没有任何反应。

使对话框模态本质上将在您打开对话框的行上“暂停”。当对话框关闭时,控制将从那里恢复,这就是你想要的(在这种情况下)

于 2013-04-23T14:38:44.067 回答