如何在不按 Enter 的情况下从控制台读取单个字符/键?有一个 old entry in Sun's bug database声称它不能用纯 java 完成。我发现了这些方法
- JNI
- JLine [ http://jline.sourceforge.net/]
- Javacurses [ http://sourceforge.net/projects/javacurses/]
我希望将单个 magic-readkey.jar
添加到我的类路径,并编写几行代码,如 (def just-hit (com.acme. MagicConsole/read-char))
.
最佳答案
这是一个使用 JLine 的“即时回显”应用程序,它将打印与注册按键相对应的 int
,结构为 Leiningen项目:
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"]])
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/