Java Pin重新验证

Java Pin重新验证,java,swing,jlabel,Java,Swing,Jlabel,我仍处于学习Java的初级阶段,目前在尝试重新输入第一次输入的PIN码以确保第二次输入正确时遇到了问题。这就像我打开你的移动设备时为它设置密码一样。 这里是问题发生的地方: int firstSet, secondSet; firstSet = Integer.parseInt(jTextField2.getText()); jTextField2.setText(""); jLabel1.setText("Re-Enter PIN"); secondSet = Integer.parseInt

我仍处于学习Java的初级阶段,目前在尝试重新输入第一次输入的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");
}
这就是我得到的错误:

线程“AWT-EventQueue-0”java.lang.NumberFormatException中的异常:用于输入字符串:“”


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

你这里有问题

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

您正在将
jTextField2.text
的值设置为
,尝试时:
secondSet=Integer.parseInt(jTextField2.getText())
您从
.getText()
中得到一个空的
字符串
,所以方法正在抱怨

正如报告中指出的那样

抛出:
NumberFormatException
-如果字符串不包含可解析整数

所有这些代码都是在没有中断的情况下执行的,所以如果您想以这种方式只使用一个方法调用来执行这些代码的话

首先删除这一行:

jTextField2.setText("");
并使用2个文本字段

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

附加组件

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

try {
    firstSet = Integer.parseInt(jTextField2.getText());
    secondSet = Integer.parseInt(jTextField3.getText());
} catch (NumberFormatException e) {
    jLabel1.setText("PIN NOT VALID; TRY AGAIN!!!");
}
备选方案如果要使用相同的jTextField并要求用户重复两次
PIN码
,则必须调整方法以执行两项操作:

  • 要求用户输入pin+接受
  • 方法调用:转换pin并将其保存在类属性中
  • 删除JTextField
  • 再次询问用户pin+接受
  • 方法调用:如果类内属性中存储了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
            }
        }
    }
}

您正在尝试将“”解析为整数。不要这样做。这实际上是我应该如何运行程序:1)我首先输入我的pin码集,然后屏幕清除。2) 然后提示我重新输入,3)如果输入正确,则提示“正确”,如果输入错误,则提示“错误”。这仅在一个文本字段中发生。:)感谢您的所有回复。:)我认为这是最好的解决办法,最接近我的困境。然而,由于我还是新手,我无法完全理解这一部分:或者,如果您想使用相同的jTextField并要求用户重复两次PIN代码,您必须调整您的方法以执行两个操作:要求用户输入PIN+接受方法调用:转换PIN并将其保存在类属性中。擦除JTextField再次询问用户pin+接受方法调用:如果在类属性中存储了pin,请与用户输入进行比较。-你能告诉我更多吗?:)顺便说一句,我正在通过netbeans将jframe用于这个程序。其中,我只有1个文本字段、3个按钮编号和1个按钮确认,您需要在重新输入pin码后再次按下。:)哇,成功了!非常感谢你,乔迪!你真是个天才!:)这是一件我自己还无法理解的事情。但我知道总有一天我会的。再次感谢我以前在计算器上使用过全局变量,但这次我忘了使用它。我将和你们一起记下我的第一课;)。另一个问题是,每当我输入数字时,它并不遵循数字应该如何对齐。虽然它是右对齐的,但它彼此跟随的方式是它与前面的数字重叠。当我输入2&1时,它应该显示21,而不是12。我试着检查属性来修复这个问题,但是我很难。哦,是的。当然谢谢你提醒我这件事。哈哈哈。。。我现在就做标记。再次感谢你,希望你也能帮助我解决这个项目的最后一个难题。嘿嘿。。。