Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JTextField数据验证_Java_String_Validation_Int_Jtextfield - Fatal编程技术网

Java JTextField数据验证

Java JTextField数据验证,java,string,validation,int,jtextfield,Java,String,Validation,Int,Jtextfield,Java新手,如有任何帮助,将不胜感激。JTextField中的数据验证有一个小问题。 用户被要求输入他们的年龄、是否吸烟以及是否超重。 对吸烟和体重的确认很有效,我设定的年龄限制也是如此 但是,如果我在ageField JTextField中输入一个字母,它似乎会卡住,并且不会打印其他验证错误。(例如,它将正确打印“年龄必须是整数”,但如果我在smokesField中也键入了“h”,则不会打印“烟雾输入应为Y、Y、N或N”。) 对不起,这是一个冗长而夸张的解释 无论如何,这是我遇到困难的代码,

Java新手,如有任何帮助,将不胜感激。JTextField中的数据验证有一个小问题。 用户被要求输入他们的年龄、是否吸烟以及是否超重。 对吸烟和体重的确认很有效,我设定的年龄限制也是如此

但是,如果我在ageField JTextField中输入一个字母,它似乎会卡住,并且不会打印其他验证错误。(例如,它将正确打印“年龄必须是整数”,但如果我在smokesField中也键入了“h”,则不会打印“烟雾输入应为Y、Y、N或N”。)

对不起,这是一个冗长而夸张的解释

无论如何,这是我遇到困难的代码,谢谢:

public void actionPerformed(ActionEvent e)
{
String ageBox = ageField.getText();
int age = 0;

if (e.getSource() == reportButton)
{
    if (ageBox.length() != 0)
        {
            try
            {
            age = Integer.parseInt(ageBox);
            }
            catch (NumberFormatException nfe)
            {
            log.append("\nError reports\n==========\n");    
            log.append("Age must be an Integer\n");
            ageField.requestFocus();
            }        
        }
    if (Integer.parseInt(ageBox) < 0 || Integer.parseInt(ageBox) > 116)
    {
      log.append("\nError reports\n==========\n");  
      log.append("Age must be in the range of 0-116\n");
      ageField.requestFocus();
    }
    if (!smokesField.getText().equalsIgnoreCase("Y") && !smokesField.getText().equalsIgnoreCase("N"))
    {
        log.append("\nError reports\n==========\n");
        log.append("Smoke input should be Y, y, N or n\n");
        smokesField.requestFocus();
    }
    if (!overweightField.getText().equalsIgnoreCase("Y") && !overweightField.getText().equalsIgnoreCase("N"))
    {
        log.append("\nError reports\n==========\n");
        log.append("Over Weight input should be Y, y, N or n\n");
        smokesField.requestFocus();
    }
    }
public void actionPerformed(ActionEvent e)
{
字符串ageBox=ageField.getText();
int年龄=0;
如果(例如getSource()==reportButton)
{
如果(ageBox.length()!=0)
{
尝试
{
年龄=整数.parseInt(年龄框);
}
捕获(NumberFormatException nfe)
{
log.append(“\n错误报告\n================\n”);
log.append(“年龄必须是整数\n”);
ageField.requestFocus();
}        
}
if(Integer.parseInt(ageBox)<0 | | Integer.parseInt(ageBox)>116)
{
log.append(“\n错误报告\n================\n”);
log.append(“年龄必须在0-116范围内\n”);
ageField.requestFocus();
}
如果(!smokesField.getText().equalsIgnoreCase(“Y”)和&!smokesField.getText().equalsIgnoreCase(“N”))
{
log.append(“\n错误报告\n================\n”);
追加(“烟雾输入应为Y、Y、N或N\N”);
smokesField.requestFocus();
}
如果(!overweightField.getText().equalsIgnoreCase(“Y”)和&!overweightField.getText().equalsIgnoreCase(“N”))
{
log.append(“\n错误报告\n================\n”);
追加(“超重输入应为Y、Y、N或N\N”);
smokesField.requestFocus();
}
}

根据您描述的情况,很可能是

    if (Integer.parseInt(ageBox) < 0 || Integer.parseInt(ageBox) > 116)
{
...
if(Integer.parseInt(ageBox)<0 | | Integer.parseInt(ageBox)>116)
{
...
正在引发未处理的NumberFormatException,因为您在ageBox中输入了一个字母。自您的try/catch处理程序捕获异常以来,您第一次获得了“Age必须是整数”的正确输出,但第二次出现时没有此类处理

为了解决这个问题,我只需将特定的if语句移动到try块中,如下所示:

    try
    {
        if (Integer.parseInt(ageBox) < 0 || Integer.parseInt(ageBox) > 116)
        {
            log.append("\nError reports\n==========\n");  
            log.append("Age must be in the range of 0-116\n");
            ageField.requestFocus();
        }
    }
    catch (NumberFormatException nfe)
    ...
试试看
{
if(Integer.parseInt(ageBox)<0 | | Integer.parseInt(ageBox)>116)
{
log.append(“\n错误报告\n================\n”);
log.append(“年龄必须在0-116范围内\n”);
ageField.requestFocus();
}
}
捕获(NumberFormatException nfe)
...

这样,如果ageBox有一个无效的条目,您仍然会得到“Age必须是整数”的输出,其他一切都应该正常运行。

第二个
整数。parseInt(ageBox)
将抛出ExceptionAnkyu,以便您快速回复。尝试了您的建议,现在效果很好。@ricispy没问题,我很高兴您发现它很有用!