Не удается разрешить java.lang.NumberFormatException, выдаваемое Integer.ParseInt

Я получаю эту ошибку, но я не могу найти, что причиной может быть желание. Это говорит об ошибке на линии, где я инициализирую переменную bet, Если я уберу эту строку и Integer.parseInt(betTextFieldAmount), то это говорит об ошибке при этой инициализации.

public class RollTheDice extends JFrame implements ActionListener {

    JButton roll = new JButton("Roll the Dice");
    JButton bet1 = new JButton("5$");
    JButton bet2 = new JButton("10$");
    JButton bet3 = new JButton("25$");
    JButton bet4 = new JButton("50$");
    JButton bet5 = new JButton("100$");

    JTextField betTextField = new JTextField(5);
    String betTextFieldAmount = betTextField.getText();
    int bet = Integer.parseInt(betTextFieldAmount);

    int money = 100;

    JLabel currentBet = new JLabel();
    JLabel currentMoney = new JLabel("Your money: " + money + "$");

    int myDice = new Random().nextInt(12) + 1;
    int AIDice = new Random().nextInt(12) + 1;

    public static void RollTheDice() {
        int myDice = new Random().nextInt(12) + 1;
        int AIDice = new Random().nextInt(12) + 1;
    }

    public RollTheDice() {
        setLayout(new FlowLayout());

        add(currentMoney);

        add(bet1);
        bet1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (money < 5) {
                    JOptionPane.showMessageDialog(null, "Not enough money!");
                } else {
                    money -= 5;
                    bet +=5;
                }
                currentMoney.setText(money + "$");
            }           
        });

        add(bet2);
        bet2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (money < 10) {
                    JOptionPane.showMessageDialog(null, "Not enough money!");
                } else {
                    money -= 10;
                    bet +=10;
                }
                currentMoney.setText(money + "$");
            }           
        });

        add(bet3);
        bet3.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (money < 25) {
                    JOptionPane.showMessageDialog(null, "Not enough money!");
                } else {
                    money -= 25;
                    bet +=25;
                }
                currentMoney.setText(money + "$");
            }           
        });

        add(bet4);
        bet4.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (money < 50) {
                    JOptionPane.showMessageDialog(null, "Not enough money!");
                } else {
                    money -= 50;
                    bet +=50;
                }
                currentMoney.setText(money + "$");
            }           
        });

        add(bet5);
        bet5.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (money < 100) {
                    JOptionPane.showMessageDialog(null, "Not enough money!");
                } else {
                    money -= 100;
                    bet +=100;
                }
                currentMoney.setText(money + "$");
            }           
        });

        add(betTextField);
        betTextField.setEditable(false);
        add(roll);
        roll.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (myDice > AIDice) {
                    money += bet;
                    JOptionPane.showMessageDialog(null, "You won " + bet + "$");
                } else {
                    JOptionPane.showMessageDialog(null, "You lost " + bet + "$");
                }
                currentMoney.setText(money + "$");
                RollTheDice();
            }           
        });
    }

    @Override
    public void actionPerformed(ActionEvent arg0) {
        // TODO Auto-generated method stub

    }
}

3 ответа

Это вызвано значением betTextFieldAmount не является действительным целым числом, поэтому при попытке преобразовать его с помощью Integer.parseInt(betTextFieldAmount); исключение брошено.

Вы должны окружить parseInt позвонить с try...catch заявление и отобразить соответствующее сообщение об ошибке для пользователя, если это произойдет.

Более того, попробуйте запретить пользователю вводить нечисловые значения, ограничив, какие символы можно вводить в поле, и добавьте проверку пустоты, чтобы отследить случай, когда в поле не было введено никакого значения.

Integer.parseInt(betTextFieldAmount)вызывает эту ошибку.
Проверьте betTextFieldAmount чтобы увидеть, имеет ли оно действительное целочисленное значение или нет.
Убедитесь, что betTextFieldAmount не должен быть нулевым или содержать какие-либо специальные символы или пробелы в начале или конце.

Попытайтесь проверить, не является ли вы betTextField.getText() не нулевым. Я предполагаю, что ваше поле не имеет значения, поэтому getText вернет ноль, и анализ не удастся

Другие вопросы по тегам