java - java/clojure 中的单字符控制台输入

标签 java clojure user-input console.readkey

如何在不按 Enter 的情况下从控制台读取单个字符/键?有一个 old entry in Sun's bug database声称它不能用纯 java 完成。我发现了这些方法

我希望将单个 magic-readkey.jar 添加到我的类路径,并编写几行代码,如 (def just-hit (com.acme. MagicConsole/read-char)).

最佳答案

这是一个使用 JLine 的“即时回显”应用程序,它将打印与注册按键相对应的 int,结构为 Leiningen项目:

  1. project.clj:

    (defproject con "1.0.0-SNAPSHOT"
      :description "FIXME: write"
      :main con.core
      :dependencies [[org.clojure/clojure "1.1.0"]
                     [org.clojure/clojure-contrib "1.1.0"]
                     [jline "0.9.94"]])
    
  2. src/con/core.clj:

    (ns con.core
      (:import jline.Terminal)
      (:gen-class))
    
    (defn -main [& args]
      (let [term (Terminal/getTerminal)]
        (while true
          (println (.readCharacter term System/in)))))
    

所讨论的功能由 jline.Terminal 类提供,它提供了一个静态方法 getTerminal 返回一个平台特定子类的实例,该子类可用于与终端交互。查看Javadoc了解更多详情。

让我们看看 asdf 长什么样...

$ java -jar con-1.0.0-SNAPSHOT-standalone.jar 
97
115
100
102

(当然,C-c 仍然会杀死应用程序。)

关于java - java/clojure 中的单字符控制台输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3225025/

相关文章:

java - JTextArea 中的插入符号位置已关闭

java - 到字符串值

clojure - 如何在 ClojureScript 页面内启动 repl?

c# - 如何添加对 AWS SQS 队列的权限?

java - 为什么在调用 nextLine() 方法时不能在 Scanner(System.in) 中输入字符串?

java - 有人有 MediaRecorder 与 ParcelFileDescriptor.fromDatagramSocket 一起使用吗?

java - 主题 : No bean named 'com.colors.themes.service.ColorLocalService' is defined 中的 Liferay 访问数据库表

clojure - 步行/步行后使用

c - 使用 C 中的线程获取用户输入而不阻塞 while 循环

java - 如何将多个链接列表中的读取用户输入关联起来?