大多数展示 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();
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);
}
});
KeyListener
只适用于 swing 类中。
如果要在命令行应用程序中实现相同的功能,可以使用 JNativeHook 库,该库使用 JNI
实现。这将允许您监听全局快捷键或鼠标移动,否则纯 Java 无法实现此功能。您也不需要使用 Swing
或其他 GUI 类。