В «JOptionPane.showInputDialog» отображается ошибка, если пользователь нажимает escape или кнопку X (Java Swing) - PullRequest
0 голосов
/ 03 сентября 2018

Я новичок в Java, я просто хочу показать сообщение об ошибке, если пользователь нажал escape клавишу на клавиатуре или нажал X кнопку showInputDialog или нажмите отмена программа закрывается нормально,

как сейчас, если я закрываю или отменяю inputDialog, выдается следующая ошибка

Exception in thread "main" java.lang.NullPointerException
at Main.main(Main.java:11)

Я также пытался выдать исключение JVM, но оно не работает, как я ожидал, вот мой код:

String userInput;
BankAccount myAccount = new BankAccount();

while (true){
   userInput = JOptionPane.showInputDialog("1. Withdraw\n2. Deposit\n3. View Balance\n4. Exit");
    switch (userInput){

        case "1":
            myAccount.withdraw(Integer.parseInt(JOptionPane.showInputDialog("Please Enter ID: ")),Double.parseDouble(JOptionPane.showInputDialog("Please Enter Amount to Withdraw: ")));
            break;
        case "2":
            myAccount.deposit(Integer.parseInt(JOptionPane.showInputDialog("Please Enter ID: ")),Double.parseDouble(JOptionPane.showInputDialog("Please enter Amount to Deposit: ")));
            break;
        case "3":
            myAccount.viewBalance(Integer.parseInt(JOptionPane.showInputDialog("Please Enter ID: ")));
            break;
        case "4":
            myAccount.exit();
            System.exit(0);
        default:
            JOptionPane.showMessageDialog(null,"Invalid Input\nPlease Try Again");
            break;
    }
}

Я просто хочу показать сообщение об ошибке, если пользователь нажимает X или отменяет запрос, как я могу это перехватить? так что я буду реализовывать свою логику там

1 Ответ

0 голосов
/ 04 сентября 2018

JOptionPane.showInputDialog возвращает ноль вместо строки, если пользователь нажимает кнопку «x» или кнопку «Отмена». Так что вместо:

while (true){
  userInput = JOptionPane.showInputDialog("1. Withdraw\n2. Deposit\n3. View Balance\n4. Exit");
  switch (userInput){

    case "1": ...

Вы хотели бы сделать что-то вроде:

while (true){
  userInput = JOptionPane.showInputDialog("1. Withdraw\n2. Deposit\n3. View Balance\n4. Exit");
  if (userInput == null) {
    JOptionPane.showMessageDialog(null, "Invalid Input\nPlease Try Again", "Cannot Cancel", JOptionPane.ERROR_MESSAGE);
    continue;
  }
  switch (userInput){

    case "1": ...

Это поймает случай отмены / 'x', и при продолжении будет пропущен переход к следующей итерации цикла while, вместо того, чтобы выдавать ошибку, когда он пытается использовать оператор switch с нулем.

...