在控制台中检测按键输入

20
我希望在用户按下某个键时执行特定的函数。这将在控制台中运行,代码使用Java编写。我应该怎么做?我几乎不了解按键/按下事件,所以需要一份详细的说明。

10
给出一个"踩"的理由会很好。通过建设性批评,尤其是强调"建设性"这个关键词,可以提高自己的表现。 - LightMikeE
作为一个注意事项,像JNativeHook这样的框架可以通过访问Windows API来提供全局钩子来捕获键盘事件。 - Zabuzard
2个回答

9

在命令行环境下无法检测事件。您应该提供一个图形用户界面,然后可以使用 KeyListener 类来检测键盘事件。

或者,您可以从标准输入读取命令,然后执行适当的函数。


5
要求在命令行中完成操作,并被告知可以使用C++来实现。那么,为什么不用Java呢? - LightMikeE
也许是因为在C++中,您可以访问操作系统函数,而在Java中,您需要一个Java UI来捕获按键?这里有一个相关的线程:https://dev59.com/1FPTa4cB1Zd3GeqPgiXC#4609067 - georges abitbol
2
从技术上讲,您可以使用Windows API添加全局键监听器挂钩,并以此方式监听按键。有像JNativeHook这样的框架可供使用。 - Zabuzard

-2
如果你想在控制台上玩耍,可以从这里开始:
import java.util.Scanner;

public class ScannerTest {

    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);
        boolean exit = false;
        while (!exit) {
            System.out.println("Enter command (quit to exit):");
            String input = keyboard.nextLine();
            if(input != null) {
                System.out.println("Your input is : " + input);
                if ("quit".equals(input)) {
                    System.out.println("Exit programm");
                    exit = true;
                } else if ("x".equals(input)) {
                    //Do something
                }
            }
        }
        keyboard.close();
    }
}

只需运行ScannerTest并键入任何文本,然后按“Enter”即可。


我需要导入任何库吗? - LightMikeE
好的。我会检查并看看。 - LightMikeE
26
据我所知,keyboard.nextLine()并不能检测按键,它会在用户按下回车键后返回该行的内容。 - Daniel Cheung
2
这不仅仅是错误 - 它需要按回车键才能传递输入。 - Antoniossss
2
这实际上并没有回答楼主的问题。它只是从标准输入读取整行。它不能处理键盘事件,如keypress或keydown/keyup。 - Andria

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