Ваш код не будет работать даже с тем, что вы сделали.
Когда пользователь нажимает кнопку
, значение поля ввода from будет нулевым.
name = JOptionPane.showInputDialog("Please enter your name: ");
Если пользователь закрывает диалоговое окно (независимо от того, введено ли значение или нет), вы получаете null
. null
не "null"
. (последняя строка).
Поэтому, когда пользователь закрывает диалоговое окно, name.equals("null")
выдаст исключение нулевого указателя.
И для обработки этой кнопки закрытия легко проверить, является ли значение нулевым, когда вы это знаете.
name = JOptionPane.showInputDialog("Please enter your name: ");
if (name != null) //Proceed only when the user has entered a valid name
{
yesNo = JOptionPane.showConfirmDialog(null, "So your name is "+name+". Is this correct?", "", JOptionPane.YES_NO_OPTION);
if (yesNo == -1)
{
System.exit(0);
}
if (yesNo == 0)
{
break;
}
}
else
{
break;
}
Основная проблема в том, что у вас бесконечный цикл. Вам нужно выйти из цикла, вы можете использовать break
, но тогда у вас есть еще один бесконечный цикл. Также добавьте нулевую проверку для этого имени в другой цикл:
while (name != null) //Enter this loop only when the user has entered a name
{
gender = JOptionPane.showInputDialog("Are you a boy or a girl?: ");
Кстати, я предполагаю, что это своего рода изучение того, что вы здесь делаете. Это определенно не хорошо в реальных приложениях. И вы можете объединить две петли, вам нужна только одна, а не две.