Исключение Null Pointer не попадает в диалог Java - PullRequest
0 голосов
/ 30 мая 2011

Я пытаюсь получить ввод из диалогового окна 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);
    }

У кого-нибудь есть решениеили есть способ сделать диалог не закрывающимся?

Ответы [ 2 ]

2 голосов
/ 30 мая 2011

Вам лучше проверить имя на недопустимые значения, прежде чем добавлять его в

String name = JOptionPane.showInputDialog("Please enter your name");
if(name == null || name.equals(""))name = DEFAULTNAME;
person = new Player(name,0);
2 голосов
/ 30 мая 2011

Вы не «ловите» 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 принять пустую строку и изменить ее на значение по умолчанию:

public Player(String Pname,int Pscore)
{
     name = (Pname == null || Pname.trim().isEmpty()) ? DEFAULT_NAME : Pname;
     score = Pscore;
}
...