JFrame 不"disposing"操作执行方法



背景:在显示主UI(myGUI)页面之前,我正在创建一个登录浏览器页面。我使用HashMap来存储正确的用户名和密码组合。键被放在一个getter方法中,然后我从LoginBrowser类构造函数访问它,在那里我构建了实际的UI。

问题:当前,密钥值存储正确,登录成功。在输入正确的凭据后,它将正确加载主UI。我试图用里面的键实例化这个类,然后调用dispose方法。但是,登录浏览器UI不会在之后消失。我的实例化有什么问题,我该如何解决?

我的当前代码:

主要方法:

public static void main(String[] args) {

IdAndPasswords s = new IdAndPasswords();        
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
LoginBrowser lb = new LoginBrowser(s.getInfo());
lb.setVisible(true);
//myGUI.requestFocusInWindow(); // makes sure textfield or other components don't auto focus on start-up
lb.setTitle("Chat App");
lb.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}); 
}

登录浏览器类生成器:

HashMap<String,String> loginInfo = new HashMap<String,String>();
/**
* Creates new form LoginBrowser
* @param loginOG
*/
public LoginBrowser(HashMap<String,String> loginOG) {
initComponents();
this.loginInfo = loginOG;

}

登录浏览器操作执行方法:

/*
If login button to perform actions
when pressed
*/
private void loginBtnActionPerformed(java.awt.event.ActionEvent evt) {                                         
if(evt.getSource()==loginBtn) {
String userIDNew = usernameText.getText(); // get text of JTextfield
String passwordNew = String.valueOf(passwordText.getPassword()); // get text of JPasswordfield and convert

if(loginInfo.containsKey(userIDNew)) { // key
// if entered characters in strings match up, 
// display message and get rid of login browser
if(loginInfo.get(userIDNew).equals(passwordNew)) {
JOptionPane.showMessageDialog(rootPane, "Login successful");
IdAndPasswords s = new IdAndPasswords();         
LoginBrowser lb = new LoginBrowser(loginInfo);
lb.dispose(); // dispose login browser
// Once old form is disposed, open main gui form
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
myGUI myGUI = new myGUI(userIDNew);
myGUI.setVisible(true);
//myGUI.requestFocusInWindow(); // makes sure textfield or other components don't auto focus on start-up
myGUI.setTitle("Chat App");
myGUI.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
});
// tell user if info entered is incorrect
} else {
JOptionPane.showMessageDialog(rootPane, "Incorrect Password");
}
} else {
JOptionPane.showMessageDialog(rootPane, "Incorrect Username");
}        
}
} 

而不是用键实例化类:

LoginBrowser lb = new LoginBrowser(loginInfo);
lb.dispose(); // dispose login browser

简单地使用这个。从netbeans的设计特性中控制JFrame:

this.dispose();

最新更新