Commandline中的Java密钥监听器

Joh*_*Max 10 java command-line

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

Yuv*_*dam 9

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

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

当然,您始终可以在单独的线程上异步读取.即主线程将继续做东西,监听器线程等待I/O阻塞调用.但这只能在应用程序级别上实现和处理.


小智 6

你可以BufferedReader在循环中使用:

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String line = "";

   while (line.equalsIgnoreCase("quit") == false) {
       line = in.readLine();

       //do something
   }

   in.close();
Run Code Online (Sandbox Code Playgroud)


Ext*_*ers 5

KeyListener仅适用于摇摆课程。

要在命令行应用程序中具有等效功能,您可以使用JNativeHook库,它通过JNI. 这将允许您监听全局快捷键或鼠标运动,否则使用纯 Java 是不可能的。您也不需要使用Swing或其他 GUI 类。


jav*_*r71 5

以下代码将阻止 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);
      }
    });
Run Code Online (Sandbox Code Playgroud)