【问题标题】:Detect a key press in console在控制台中检测按键
【发布时间】:2014-12-09 14:15:01
【问题描述】:

我想在用户按键时执行某个功能。这将在控制台中运行,并且代码是 Java 的。我该怎么做呢?我对按键/按键的了解几乎为零,因此我也可以真正使用解释。

【问题讨论】:

  • 所以,否决票的理由很好。可以通过一些建设性的批评来改进,建设性是这里的关键词。
  • 请注意,像 JNativeHook 这样的框架可以通过 Windows API 为关键事件提供全局挂钩。

标签: java


【解决方案1】:

您无法在命令行环境中检测到事件。您应该提供一个 GUI,然后您可以使用 KeyListener 类来检测键盘事件。

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

【讨论】:

  • 要求是在命令行中完成,我被告知可以在 C++ 中完成。那么,为什么不使用 Java?
  • 可能是因为在 C++ 中您可以访问操作系统功能,而在 Java 中您需要 java ui 来捕获按键?这是一个相关线程:stackoverflow.com/a/4609067/4802862
  • 从技术上讲,您可以使用 windows api 添加一个全局键侦听器挂钩并侦听这样的按键。有像 JNativeHook 这样的框架。
【解决方案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'

【讨论】:

  • 我需要为此导入任何库吗?
  • 好的。我去看看
  • 据我所知keyboard.nextLine() 没有检测到按键。用户按下 Enter 后返回该行。
  • 这不仅仅是错误的 - 它需要 ENTER 才能真正传递输入。
  • 这不能回答 OP 的问题。这只是从标准输入中读取一整行。这不处理按键事件,如 keypress 或 keydown/keyup。
猜你喜欢
  • 2012-08-28
  • 1970-01-01
  • 2018-12-03
  • 2015-09-30
  • 2016-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-14
相关资源
最近更新 更多