【发布时间】:2015-08-12 12:24:43
【问题描述】:
我收到此错误,但我似乎找不到可能导致它的原因。它说错误出现在我初始化变量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
}
}
【问题讨论】:
-
澄清一下:去掉解析方法时是不是同样的错误?
-
是的,完全一样。
-
正如其他人在 NumberFormatException 下面发布的那样,始终意味着传递给 parseInt 的字符串不是有效数字,因此您应该使用
try...catch包装来处理错误数据。此外,您应该将初始化和解析分开,以便在传递数据数据时至少可以默认为一个值。 -
那么在每个 ActionListener 中包围“赌注”?
-
不,只有当您执行解析时,您才应该将 parse 方法包装在
try..catch块中以捕获正在传递的无效数字数据并执行诸如提醒用户之类的操作。
标签: java user-interface parseint numberformatexception