2013-04-23 49 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(真)告訴你它是前

相關問題