java.lang.NumberFormatException: для входной строки: "-" - PullRequest
0 голосов
/ 26 сентября 2019

Я много ищу, чтобы решить эту ошибку, но ни одно решение не подходит.

Я использую Swing для создания простого интерфейса.Этот интерфейс имеет JTextField , где пользователь должен написать число, это число должно быть положительным , чтобы разрешить включение кнопки сохранения.

Я хочу, чтобы, еслипользователь вводит число> = 1, кнопка сохранения будет включена, и если пользователь вводит отрицательное число, его отключение будет продолжаться.

Я написал тест , в котором пользователь пытается ввестиотрицательное число:

    @Test
    public void testWhenQuantityTextBoxIsNegativeNumberThenSaveButtonShouldBeDisabled() {
        window.textBox("quantityTextBox").enterText("-5");
        window.button(JButtonMatcher.withText("Save")).requireDisabled();
    }

И это код JTextField amountTextBox:

textQuantity = new JTextField();
        KeyAdapter btnSaveEnabler = new KeyAdapter() {
            @Override
            public void keyReleased(KeyEvent e) {
                btnSave.setEnabled(!(Integer.parseInt(textQuantity.getText()) < 1));
        }
};
textQuantity.addKeyListener(btnSaveEnabler);
textQuantity.setEnabled(true);
textQuantity.setName("quantityTextBox");

Проблема в том, что когда я пытаюсь преобразовать отрицательное число, представленноеВ виде строки ("-5") в целочисленный тип У меня есть эта ошибка:

Исключение в потоке "AWT-EventQueue-0" java.lang.NumberFormatException: Для входной строки: "-"at java.lang.NumberFormatException.forInputString (Неизвестный источник)

Кажется, проблема в знаке "-" перед номером 5.

Я предполагаю, что проблема задается Integer.parseInt но я не знаю как это решить.

Я пытаюсьизмените Integer.parseInt на Double.parseDouble, но ничего не изменилось.

РЕДАКТИРОВАТЬ: Спасибо Тому, теперь я знаю, что:

Проблема не в -5, проблема в том, что вы проверяете число при каждом нажатии клавиши, поэтому он пытается проверить - без какого-либо номера.

Поэтому я пытаюсь изменить с keyReleased() на keyPressed(), но теперьУ меня есть:

java.lang.NumberFormatException: для входной строки: ""

и:

java.lang.NumberFormatException:Для входной строки: "-"

Так что я пытаюсь с keyTyped(), но все еще с той же ошибкой.

Я действительно не знаю, как ее решить.

Если что-то не понятно, пожалуйста, спросите меня и извините за мой английский.Спасибо заранее.

1 Ответ

1 голос
/ 26 сентября 2019

Просто используйте оператор try, чтобы поймать любой NumberFormatException:

KeyAdapter btnSaveEnabler = new KeyAdapter() {
        @Override
        public void keyReleased(KeyEvent e) {
            try {
                btnSave.setEnabled(!(Integer.parseInt(textQuantity.getText()) < 1));
            } catch (NumberFormatException nfe) {
                btnSave.setEnabled(false);
            }
    }
};

Это было бы хорошей идеей , даже если вы еще не ожидали NumberFormatExceptionкогда пользователь вводит начальный - отрицательного числа.Поскольку JTextField не накладывает никаких ограничений на то, что пользователь может печатать, вы никогда не можете быть абсолютно уверены, что textQuantity.getText() вернет значение, которое Integer.parseInt() может проанализировать без выброса NumberFormatException.Так что лучше быть готовым, чем удивляться, особенно потому, что «удивление» означает необъяснимое исключение и, следовательно, внезапную и мрачную смерть для вашей программы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...