Java字符串比较在KeyListener中失败

3
我正在尝试找出为什么KeyListener无法完全执行,这让我感到非常沮丧。可能是Java中的某些东西我不知道。
我正在尝试使用KeyListener通过“Enter”键捕获用户在JTextArea中输入的文本。当用户按下Enter键时,他们在JTextArea中输入的字符串会通过`.getText()`保存,然后使用`.equalsIgnoreCase()`与另一个字符串进行比较,以查看它们是否匹配,但程序似乎完全忽略了这一批代码。我已经试图找到我的错误三天了,但一直没有头绪。
以下是我的代码示例。在此示例中,我正在尝试使程序在用户键入单词“quit”时执行`System.exit(0)`。任何帮助都将不胜感激。我真的希望我没有忘记什么愚蠢的事情。
playerInput.addKeyListener(new KeyAdapter() {
            public void keyReleased(KeyEvent e) {
                if(e.getKeyCode()==KeyEvent.VK_ENTER) {
                    String test = playerInput.getText();
                    String quit = "quit";
                    playerInput.setText("");
                    if(test.equalsIgnoreCase(quit))
                        System.exit(0);
                }
            }
            public void keyPressed(KeyEvent e) {}
            public void keyTyped(KeyEvent e) {}
        }); 

1
你能试试这个代码吗:String test = playerInput.getText().trim(); - nullpotent
1
你能否在keyReleased方法的开头放置一个println语句以确保该方法实际上被调用了吗?如果没有,我敢打赌你可能遇到了焦点子系统的问题。 - wchargin
@ametren 调试器返回测试为空,这绝对是我的问题的根源。 - Speakr
在这种情况下,我实际上很惊讶你在test.equalsIgnoreCase(quit)上没有得到NullPointerException。 - ametren
@Speakr,没有明显的冲突,但你将成为一个专注和可聚焦的猎人。 - mKorbel
显示剩余3条评论
3个回答

3
这应该是有效的:
playerInput.addKeyListener(new KeyAdapter() {
            public void keyReleased(KeyEvent e) {
                if(e.getKeyCode()==KeyEvent.VK_ENTER) {
                    String test = playerInput.getText().replaceAll("\\r|\\n", "");
                    String quit = "quit";
                    playerInput.setText("");
                    if(test.equalsIgnoreCase(quit))
                        System.exit(0);
                }
            }
            public void keyPressed(KeyEvent e) {}
            public void keyTyped(KeyEvent e) {}
        }); 

这解决了问题。我猜是我在不知不觉中插入了一个换行符。尽管这并不能解释为什么调试器会返回 'test' 为空。 - Speakr

3
为什么不使用DocumentListener并在其中检查文档中是否包含单词“quit”。

这是一个很棒的想法/回应。我只选择了另一个,因为它不需要对代码进行大量的重构。谢谢! - Speakr

0

用户是否输入了 "quit" 或者 "quit\n\r" ... 如果你明白我的意思的话。也许在 JTextArea 中有额外的空格。

尝试使用 test.trim().equalsIgnoreCase(quit)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接