【发布时间】:2012-03-05 08:17:09
【问题描述】:
我有一个 JTextField,我并不总是将值传递给它,但如果该人没有在 JTextField 中输入任何内容,则会在程序运行时引发 NumberFormatException 错误。我在下面有一些代码,我正在尝试将空响应转换为不同的字符串值。为什么不将 stringInput 分配为“0”的字符串?
public int getOptionalDinners()
{
try
{
// get the input from the text field and determine if it's more than 0
String stringInput = " ";
stringInput = dinnerTextField.getText();
if (stringInput == null)
stringInput = "0";
int validAmount = Integer.parseInt(stringInput);
if (validAmount < 0)
throw new IllegalArgumentException();
dinnerQuantity = validAmount * 30;
}
catch (NumberFormatException error)
{
JOptionPane.showMessageDialog (null, "The number of dinners needs to be numeric.",
"Input Error", JOptionPane.ERROR_MESSAGE);
}
catch (IllegalArgumentException error)
{
JOptionPane.showMessageDialog (null, "The number of dinners needs to be higher than 0.",
"Input Error", JOptionPane.ERROR_MESSAGE);
}
return dinnerQuantity;
}
【问题讨论】:
-
堆栈跟踪呢?抛出哪个异常,在哪里抛出?
-
java.lang.Exception OptionalDinners.getOptionalDinners(OptionalDinners.java:70) RegistrationGUI$CalcButtonListener.actionPerformed(RegistrationGUI.java:90) javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) javax .swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
-
我添加了新的 Exception().printStackTrace();到第 70 行,在第一个 catch 块内。
-
您实际上是在吞下异常,因此很难看出问题所在。创建一个新的异常只是为了查看堆栈跟踪并不是很有帮助。考虑记录错误或执行 error.printStackTrace() 代替。无论如何,在这种情况下,您似乎遇到了 NumberFormatException,如果您尝试将非数字(例如空字符串)转换为 int,就会发生这种情况。
-
谢谢。下次我会记住的。
标签: java swing jtextfield