Ваш цикл while не принадлежит, поскольку, хотя это нормально для линейной консольной программы, он будет блокировать поток событий Swing или любой другой поток событий в программе, управляемой событиями, делая программу замороженной и бесполезной. Вместо этого вы, вероятно, захотите просто очистить текстовые поля диалогового окна, если ввод неправильный, и отобразить сообщение об ошибке в панели JOptionPane. На самом деле, скорее всего, все, что вам нужно, это блок if / else и цикл while:
SignupButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String Username = "";
String Password = "";
String ConfirmPass = "";
Username = UsernameTF.getText();
Password = PasswordTF.getText();
ConfirmPass = ConfirmPassTF.getText();
if(Password.equals(ConfirmPass)) {
PassErrorMsg.setVisible(false);
// do database stuff here
} else {
// here clear fields and show an error message
// consider incrementing an error count as well
}
}
});
Опять же, ключевая проблема заключается в том, что при создании программы, управляемой событиями, вы должны мыслить нелинейно , управляемой событиями. Логика линейного кода консоли не будет работать (в этих ситуациях).
Другие проблемы: Вы не должны использовать строки для хранения паролей, так как они будут встроены в пул строк, и их можно легко взломать. Кроме того, да, как заявляет Camickr, изучайте и соблюдайте соглашения об именах Java, в том числе начинайте имена переменных и методов со строчных букв и имена классов с прописными буквами. Избегайте использования макетов setBounds(...)
и null
, так как это приводит к графическому интерфейсу, который не работает на всех платформах. Вместо этого изучите и используйте менеджеры по расположению.