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); } });
- Java BouncyCastle Cast6Engine(CAST-256)加密
- Objects :: nonNull和x – > x!= null之间有什么区别吗?
- hibernate如何从现有数据库视图中检索数据?
- 用Java执行Java代码
- Java NoSuchAlgorithmException – SunJSSE,sun.security.ssl.SSLContextImpl $ DefaultSSLContext
- 如何避免从URL.getFile()获取URL编码路径?
- Java 7 zip文件系统提供程序似乎不接受URI中的空格
- 使用com.google.common.base.Splitter时出现NoSuchMethodErrorexception
- 在ElasticSearch中获取SearchResponse的结果