Java 如何使用JOptionPane退出while循环

Java 如何使用JOptionPane退出while循环,java,Java,我的代码有问题,如果用户单击CANCEL.OPTION或CLOSED.OPTION,我将尝试退出此循环。我处理了异常,但似乎无法使用窗口上的按钮。该程序从用户输入的年龄中获取用户的生日。我遇到的问题是,我无法通过按钮结束循环。提前谢谢 public Integer getBirthYear() { boolean prompt = true; while(prompt) { String enteredAge = showInputDialog(null,"Ent

我的代码有问题,如果用户单击
CANCEL.OPTION
CLOSED.OPTION
,我将尝试退出此循环。我处理了异常,但似乎无法使用窗口上的按钮。该程序从用户输入的年龄中获取用户的生日。我遇到的问题是,我无法通过按钮结束循环。提前谢谢

public Integer getBirthYear() {
    boolean prompt = true;
    while(prompt) {
        String enteredAge = showInputDialog(null,"Enter age:");
        try {
            age = Integer.parseInt(enteredAge);
            if(age == JOptionPane.CANCEL_OPTION || age == JOptionPane.CLOSED_OPTION) {
                System.out.println("MADE IT INTO IF");
            }
            age = year - age;
            prompt = false;
            showMessageDialog(null,age);
        } catch (NumberFormatException e) {
            e.printStackTrace();
        }
    }
    return age;
}

showInputDialog有多个重载版本,具有不同的参数。当用户按下cancel时,只有上一版本的javadoc正确记录返回值为null

public int getBirthYear() {
    boolean prompt = true;
    while (prompt) {
        String enteredAge = showInputDialog(null,"Enter age:");
        if (enteredAge == null) { // Cancel pressed
            age = -1;
            prompt = false;
        } else {
            try {
                age = Integer.parseInt(enteredAge);
                age = year - age;
                prompt = false;
                showMessageDialog(null, age);
            } catch (NumberFormatException e) {
                showMessageDialog(null, "Enter a valid number");
            }
        }
    }
    return age;
}

你可能想重新构造一下程序;让年龄成为一个局部变量。对实整数值使用
int
Integer
是int的对象包装类。

showInputDialog有几个重载版本,具有不同的参数。当用户按下cancel时,只有上一版本的javadoc正确记录返回值为null

public int getBirthYear() {
    boolean prompt = true;
    while (prompt) {
        String enteredAge = showInputDialog(null,"Enter age:");
        if (enteredAge == null) { // Cancel pressed
            age = -1;
            prompt = false;
        } else {
            try {
                age = Integer.parseInt(enteredAge);
                age = year - age;
                prompt = false;
                showMessageDialog(null, age);
            } catch (NumberFormatException e) {
                showMessageDialog(null, "Enter a valid number");
            }
        }
    }
    return age;
}

你可能想重新构造一下程序;让年龄成为一个局部变量。对实整数值使用
int
Integer
是int的对象包装类。

对您的问题最简单的回答是,只需将promp=false放在try-and-catch子句之外,它就可以工作了:

public Integer getBirthYear() {
boolean prompt = true;
while(prompt) {
    String enteredAge = showInputDialog(null,"Enter age:");
    try {
        age = Integer.parseInt(enteredAge);
        if(age == JOptionPane.CANCEL_OPTION || age == JOptionPane.CLOSED_OPTION) {
            System.out.println("MADE IT INTO IF");
        }
        age = year - age;
        showMessageDialog(null,age);
    } catch (NumberFormatException e) {
        e.printStackTrace();
    }
        prompt = false;
}
return age;
}

对于您的问题,最简单的答案是,只需将promp=false放在try-and-catch子句之外,它就可以工作了:

public Integer getBirthYear() {
boolean prompt = true;
while(prompt) {
    String enteredAge = showInputDialog(null,"Enter age:");
    try {
        age = Integer.parseInt(enteredAge);
        if(age == JOptionPane.CANCEL_OPTION || age == JOptionPane.CLOSED_OPTION) {
            System.out.println("MADE IT INTO IF");
        }
        age = year - age;
        showMessageDialog(null,age);
    } catch (NumberFormatException e) {
        e.printStackTrace();
    }
        prompt = false;
}
return age;
}

问题出在范围之内。进入的年龄并没有进入禁区。我解决了这个问题

    public Integer getBirthYear() {
    boolean prompt = true;
    do {
        try {
            age = year - Integer.parseInt(showInputDialog(null,"Enter age:"));
            prompt = false;
            showMessageDialog(null, age);
        } catch (NumberFormatException e) {
            String ageEntered = showInputDialog(null,"Enter age:");
            e.printStackTrace();
            if(ageEntered == null) { //close the file if Cancel is chosen
                prompt = false;
            }
        }
    } while(prompt);
    return age;
}

问题出在范围之内。进入的年龄并没有进入禁区。我解决了这个问题

    public Integer getBirthYear() {
    boolean prompt = true;
    do {
        try {
            age = year - Integer.parseInt(showInputDialog(null,"Enter age:"));
            prompt = false;
            showMessageDialog(null, age);
        } catch (NumberFormatException e) {
            String ageEntered = showInputDialog(null,"Enter age:");
            e.printStackTrace();
            if(ageEntered == null) { //close the file if Cancel is chosen
                prompt = false;
            }
        }
    } while(prompt);
    return age;
}

将promp=false置于try-and-catch子句之外。将promp=false置于try-and-catch子句之外。