我有一个Swing GUI,我限制用户注册,因此用户名和密码不能相同。我正在使用JoptionPane
来执行以下代码:
public void actionPerformed(ActionEvent e) {
String username = tuser.getText();
String password1 = pass1.getText();
String password2 = pass2.getText();
String workclass = wclass.getText();
Connection conn = null;
try {
if(username.equalsIgnoreCase(password1)) {
JOptionPane.showMessageDialog(null,
"Username and Password Cannot be the same. Click OK to Continue",
"Error", JOptionPane.ERROR_MESSAGE);
System.exit(0);
}
...
问题是我必须使用System.exit(0)
;没有它,下一个代码就会被执行。即使在JOptionPane
加速后,注册仍然成功。我不需要系统退出,但我需要在验证后将用户保留在注册页面上。做这个的最好方式是什么?是否有其他方便的方法来执行此操作而不是使用JOptionPane
?
答案 0 :(得分:3)
替换
System.exit(0);
与
return;
如果您不希望执行该方法的其余部分
答案 1 :(得分:3)
您需要将代码置于无限循环中,并在成功结果时将其分解。类似的东西:
while(true)
{
// get input from user
if(vlaidInput) break;
}
答案 2 :(得分:3)
将下一个代码放入else部分可能会起作用
if(username.equalsIgnoreCase(password1))
{
JOptionPane.showMessageDialog(null, "Username and Password Cannot be the same. Click OK to Continue","Error",JOptionPane.ERROR_MESSAGE);
}
else
{
//place that next code
// username and password not equals, then it will execute the code
}
答案 3 :(得分:2)
首先,最好将UI和业务逻辑(在本例中为验证)分开。让它们分开建议一种更好的方式来处理交互。因此,使用方法UserValidation
创建单独的类boolean isValid()
是有意义的。像这样:
public class UserValidation {
private final String name;
private final String passwd;
private final String passwdRpt;
public UserValidation(final String name, final String passwd, final String passwdRpt) {
this.name = name;
this.passwd = passwd;
this.passwdRpt = passwdRpt;
}
public boolean isValid() {
// do your validation logic and return true if successful, or false otherwise
}
}
然后动作代码如下所示:
public void actionPerformed(ActionEvent e) {
if (new UserValidation(tuser.getText(), pass1.getText(), pass2.getText()).isValid()) {
// do everything needed is validation passes, which should include closing of the frame of dialog used for entering credentials.
}
// else update the UI with appropriate error message -- the dialog would not close by itself and would keep prompting user for a valid entry
}
建议的方法为您提供了一种方便的单元测试验证逻辑并在不同情况下使用它的方法。另请注意,如果方法isValid()
中的逻辑比SwingWorker
执行的逻辑重要。 SwingWorker
的调用是动作(即UI)逻辑的责任。