2013-04-23 58 views
0

我试图实现以下目标:显示登录窗口,再从工厂,以确定哪些GUIclass开例如(admin/dev/tester)。关闭GUI,但主要的方案应保持运行并打开一个新

我无法设法让第二个窗口弹出;我试着用处理程序来关闭程序,但没有把主程序运行到最后。

主:

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); 
      } 
     } 
    } 

LoginGui:

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); 
       } 
      } 
     }); 
+0

我没有看到你在哪里显示窗口,你在做构造函数吗? – Dima 2013-04-23 14:40:10

+0

您是否尝试过调试代码? 'Main Method'等待'loginGuiWindow = new LoginGui(uc);'直到'loginGuiWindow关闭'? – 2013-04-23 14:41:18

+1

为了尽快提供更好的帮助,请发布[SSCCE](http://sscce.org)。目前,你只能在黑暗中随机拍摄,猜测你的代码实际上在做什么。 – 2013-04-23 14:51:57

回答

1

确保LoginGui的对话框模式。

如果不是,控件将显示后返回到原始方法。 loggingResult从不> 0,所以“Checking实例”永远不会运行。然后,当用户最终登录时,该代码已经运行,没有任何反应。

使对话框模态基本上会在打开对话框的行上“暂停”。当关闭对话框,控制将继续从那里,这是你想要的(在这种情况下)

2

当你是显示一个窗口,它不是一个阻塞调用,尽量setModal(真)告诉你它是前

相关问题