【问题标题】:How can I convert a JTextField that's returning null to a different string value?如何将返回 null 的 JTextField 转换为不同的字符串值?
【发布时间】: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


【解决方案1】:

试试

if (stringInput == null || stringInput.length() == 0)  {
  stringInput = "0";
}

你还需要检查它是否为0长度。

然后将值赋回 JTextField。

dinnerTextField.setText(stringInput);

【讨论】:

  • 使用 .length 告诉我它找不到符号:length
  • .length() 有一个括号,因为它是一个字符串函数而不是一个属性。
  • 嘿,谢谢。我需要做的就是将 () 添加到长度上(我已经尝试使用长度)。
【解决方案2】:

您可以更改以下行:

if (stringInput == null)

到

if (stringInput == null || stringInput == "")

【讨论】:

  • 仍然会引发异常
猜你喜欢
  • 2019-08-30
  • 2022-10-01
  • 1970-01-01
  • 2014-03-17
  • 2013-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多