Просто, программа выдает ScannerException, но ваш try catch может перехватывать только NumberFormatException, вам нужно добавить еще одно предложение catch для перехвата ScannerException или перехватить только общее Exception.
например, когда вы говорите:
} catch (NumberFormatException nfe) {
JOptionPane.showMessageDialog(null,"Input must be a number.");
}
, который только указывает, как перехватить NumberFormatException.
Чтобы перехватить все исключения, вам нужно сделать это:
} catch (NumberFormatException nfe) {
JOptionPane.showMessageDialog(null,"Input must be a number.");
}catch (Exception e){
JOptionPane.showMessageDialog(null,"Generic exception caught");
}
В этом случае второй перехват получит все, что не было перехвачено в первом перехвате, потому что все исключения расширяют класс Exception, вы можете перехватить все производные классы с помощью этого оператора.
Тем не менее, поскольку сам по себе перехват исключений исключен, вы также можете сделать:
} catch (NumberFormatException, ScannerException e) {
JOptionPane.showMessageDialog(null,"Input must be a number.");
}
Чтобы перехватить оба исключения в одном и том же блоке.