#java #exception #try-catch
#java #исключение #попробуйте-перехват
Вопрос:
Я пытаюсь получить входные данные из диалогового окна Java и, похоже, не могу уловить NullPointerException
, когда окно закрыто, кто-нибудь может помочь?
private static final String DEFAULTNAME = "Player001";
public class Player implements Serializable
{
private String name;
private int score;
public Player(String Pname,int Pscore)
{
name = Pname;
score = Pscore;
}
}
try
{
person = new Player(JOptionPane.showInputDialog("Please enter your name"),0);
}
catch(NullPointerException e)
{
person = new Player(DEFAULTNAME,0);
}
catch(Throwable t)
{
person = new Player(DEFAULTNAME,0);
}
Есть ли у кого-нибудь решение или есть способ сделать невозможным закрытие диалога?
Комментарии:
1. Для более быстрой справки отправьте SSCCE .
Ответ №1:
вам лучше проверить имя на наличие недопустимых значений, прежде чем добавлять его в
String name = JOptionPane.showInputDialog("Please enter your name");
if(name == null || name.equals(""))name = DEFAULTNAME;
person = new Player(name,0);
Ответ №2:
Вы не «перехватываете» NPE, как вы делаете. Получите строку от пользователя, посмотрите, является ли она == null, а затем, если да, используйте имя проигрывателя по умолчанию. В псевдокоде:
call JOptionPane and get player name
If player name is null
create new Player with default name
else
create new Player with the user-entered name.
Здесь нет необходимости в try / catch.
Другой способ решить это — позволить вашему конструктору Player принять нулевую строку и изменить ее на default:
public Player(String Pname,int Pscore)
{
name = (Pname == null || Pname.trim().isEmpty()) ? DEFAULT_NAME : Pname;
score = Pscore;
}