【问题标题】:Java String comparison fails within KeyListenerKeyListener 中的 Java 字符串比较失败
【发布时间】:2012-06-18 20:40:02
【问题描述】:

我在试图弄清楚为什么 KeyListener 无法完全执行时遇到了令人难以置信的沮丧。它一定是我不知道的 Java 语言。

我正在尝试使用 KeyListener 来捕捉用户通过“Enter”键将文本输入 JTextArea。当用户按下 Enter 键时,他们输入到 JTextArea 中的 String 通过.getText(); 保存,然后与另一个 String 进行比较,以查看它们是否匹配使用 .equalsIgnoreCase();,但程序似乎完全忽略了这批代码。 3 天来,我一直在尝试断断续续地找出我的错误,但什么都想不出来。

以下是我的代码示例。在这个例子中,我试图让程序在用户输入单词“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) {}
        }); 

【问题讨论】:

  • 你在调试器中运行过吗?什么是“测试”?
  • 你可以试试String test = playerInput.getText().trim();
  • 您能否在keyReleased 方法的开头放置一个println 语句以确保该方法实际被调用?如果不是,我敢打赌,您在使用 Focus Subsystem 时遇到了问题。
  • @ametren 调试器返回 test 为 null,这绝对是我问题的根源。
  • 在这种情况下,我真的很惊讶您在 test.equalsIgnoreCase(quit) 上没有收到 NullPointerException

标签: java string swing keylistener


【解决方案1】:

这应该可行:

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' 为 null。
【解决方案2】:

如果文档保存的文本包含“退出”一词,为什么不使用 DocumentListener 并检查它。

【讨论】:

  • 这是一个好主意/响应。我只选择了另一个,因为它不需要对代码进行大量修改。谢谢!
【解决方案3】:

如果你明白我的意思,用户输入的是“quit”还是“quit\n\r”。可能JTextArea 中有多余的空格。

试试test.trim().equalsIgnoreCase(quit)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-05
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多