引脚重新验证

Pin Re-Verification

我仍处于学习的初级阶段Java,我目前在尝试重新输入我第一次输入的 PIN 码以确保我输入正确的 PIN 码时遇到问题时间。这就像在我打开您的移动设备时为您设置密码一样。 这是问题发生的地方:

int firstSet, secondSet;
firstSet = Integer.parseInt(jTextField2.getText());
jTextField2.setText("");
jLabel1.setText("Re-Enter PIN");
secondSet = Integer.parseInt(jTextField2.getText());
if(firstSet==secondSet)
{
    jLabel1.setText("PIN VERIFIED");
}
else
{
    jLabel1.setText("PIN INCORRECT");
}

这是我遇到的错误:

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: ""

我希望有人能帮助我。 :)

你这里有问题

jTextField2.setText("");
// ... 
secondSet = Integer.parseInt(jTextField2.getText());

您正在将 jTextField2.text 的值设置为 "",当您尝试时:secondSet = Integer.parseInt(jTextField2.getText()); 您从 .getText() 得到一个空的 String,所以方法 Integer.parseInt() is complaining with NumberFormatException

正如 Integer:parseInt(String) API

中指出的那样

Throws: NumberFormatException - if the string does not contain a parsable integer.

所有这些代码都是不间断地执行的,所以如果你想以这种方式只调用一个方法来做到这一点。

先删除这一行:

jTextField2.setText("");

并使用 2 个文本字段。

firstSet =  Integer.parseInt(jTextField2.getText());
secondSet = Integer.parseInt(jTextField3.getText());
//                                     ^ here!!!!

附加功能

为了避免用户输入无效数据或根本没有 dagta 时出现类似问题,我建议您安全解析

的值
try {
    firstSet = Integer.parseInt(jTextField2.getText());
    secondSet = Integer.parseInt(jTextField3.getText());
} catch (NumberFormatException e) {
    jLabel1.setText("PIN NOT VALID; TRY AGAIN!!!");
}

ALTERNATIVE 如果您想使用相同的 jTextField 并要求用户重复 2 次 PIN CODE 您必须调整您的方法以执行 2 个操作:

  • 询问用户密码 + 接受
  • 方法调用:转换 pin 并将其保存在 class 属性中。
  • 擦除 JTextField
  • 再次询问用户密码 + 接受
  • 方法调用:如果在 class 属性中存储了 pin,请与用户输入进行比较。

例子

class YourClass {
    int firstSet = 0; // global attribute!

    public void yourListenerMethod() {
        // if firstSet == 0 is first attempt
        if (firstSet == 0) {
            firstSet = Integer.parseInt(jTextField2.getText());
            jTextField2.setText("");
            jLabel1.setText("Re-Enter PIN");
        //
        // if firstSet != 0 is second attempt so compare
        } else {
            int secondSet = Integer.parseInt(jTextField2.getText());
            if(firstSet==secondSet)
            {
                jLabel1.setText("PIN VERIFIED");
                // reset the pin if necessary
                firstSet = 0;
            }
            else
            {
                jLabel1.setText("PIN INCORRECT");
                // reset the pin if necessary
            }
        }
    }
}