Commandline中的Java密钥监听器

大多数演示在Swing中显示keyevent,命令行中的等价物是什么?

在控制台窗口中没有事件的意义上,Swing与命令行环境不同。 标准GUI处理对象和事件。 控制台没有这样的等效概念。

拥有的是标准输入(以及标准输出),您可以从中读取。 请参阅此问题 ,了解如何从控制台读取单个字符(无需等待换行符) – 或者更确切地说,如何在Java中执行此操作并不容易。

当然,您始终可以在单独的线程上异步读取。 即主线程将继续执行操作,侦听线程等待I / O阻塞调用。 但这只能在应用程序级别上实现和处理。

你可以在循环中使用BufferedReader

 BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); String line = ""; while (line.equalsIgnoreCase("quit") == false) { line = in.readLine(); //do something } in.close(); 

KeyListener仅适用于swing类。

要在命令行应用程序中具有等效function,您可以使用JNativeHook库通过JNI完成此操作。 这将允许您监听使用纯Java无法实现的全局快捷方式或鼠标移动。 您也不需要使用Swing或其他GUI类。

以下代码将阻止Ctrl + C组合停止CLI java程序。

 import sun.misc.Signal; import sun.misc.SignalHandler; Signal.handle(new Signal("INT"), new SignalHandler() { // Signal handler method public void handle(Signal signal) { System.out.println("Got signal" + signal); } });