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

Ada*_*deg 7 java user-input clojure console.readkey

如何从控制台读取单个字符/键而无需按Enter键?Sun的bug数据库中有一个旧条目声称无法在纯java中完成.我找到了这些方法

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

Mic*_*zyk 11

这是一个使用JLine的"立即回声"应用程序,它将打印int对应于已注册的按键的s,结构为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"]])
    
    Run Code Online (Sandbox Code Playgroud)
  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)))))
    
    Run Code Online (Sandbox Code Playgroud)

所讨论的功能由jline.Terminal类提供,该类提供静态方法,getTerminal返回特定于平台的子类的实例,该子类可用于与终端交互.有关更多详细信息,请参阅Javadoc.

让我们看看asdf看起来像什么......

$ java -jar con-1.0.0-SNAPSHOT-standalone.jar 
97
115
100
102
Run Code Online (Sandbox Code Playgroud)

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