在jLabel中将字符串解析为整数时出错

时间:2018-03-29 20:41:21

标签: java swing

我向DocumentFilter添加了jTextField1,仅保留方法JTextFieldFilter()中的数字。

private void jTextField1KeyTyped(java.awt.event.KeyEvent evt) {                                                   
    Document document = jTextField1.getDocument();
    document.addDocumentListener(new JButtonStateController(MultiPlayerGoButton, 0));
    ((AbstractDocument) jTextField1.getDocument()).setDocumentFilter(new JTextFieldFilter(1, 1));
    if(Integer.parseInt(jTextField1.getText()) == 2) {
        // code
    }
}

当我将jTextField1中的字符串解析为int并将其与2进行比较时,我收到错误,

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: ""
    at java.lang.NumberFormatException.forInputString
    at java.lang.Integer.parseInt
    at java.lang.Integer.parseInt
    at Project.jTextField1KeyTyped
    at Project.access$2100
    at Project$20.keyTyped

我也尝试过字符串比较,例如jTextField1.getText().equals("2")

2 个答案:

答案 0 :(得分:1)

引发的异常实际上告诉了错误:

  

线程中的异常" AWT-EventQueue-0" java.lang.NumberFormatException:对于输入字符串:""

您的JLabel为空,因此当您尝试将其解析为整数时会导致NumberFormatException

答案 1 :(得分:0)

文本字段的内容使用空字符串进行评估:""。这当然不能转换为整数。

除了这个显而易见的事情之外,如果删除文本字段的数字字符,则您使用的DocumentFilterJTextFieldFilter)可能会被错误地实现。
此外,在任何情况下,使用DocumentFilter并不能减轻您检查文本字段是否包含某些内容的麻烦。

所以这个检查是否不可避免:

if(!jTextField1.getText().isEmpty) {
   ...
    // With a correctly implemented `DocumentFilter`, you should have a number here
    if (Integer.parseInt(jTextField1.getText()) == 2) {
      ...
    }

}