我向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")
答案 0 :(得分:1)
引发的异常实际上告诉了错误:
线程中的异常" AWT-EventQueue-0" java.lang.NumberFormatException:对于输入字符串:""
您的JLabel为空,因此当您尝试将其解析为整数时会导致NumberFormatException
。
答案 1 :(得分:0)
文本字段的内容使用空字符串进行评估:""
。这当然不能转换为整数。
除了这个显而易见的事情之外,如果删除文本字段的数字字符,则您使用的DocumentFilter
(JTextFieldFilter
)可能会被错误地实现。
此外,在任何情况下,使用DocumentFilter
并不能减轻您检查文本字段是否包含某些内容的麻烦。
所以这个检查是否不可避免:
if(!jTextField1.getText().isEmpty) {
...
// With a correctly implemented `DocumentFilter`, you should have a number here
if (Integer.parseInt(jTextField1.getText()) == 2) {
...
}
}