하나의 문자 콘솔에서 입력 java/clojure
-
13-09-2020 - |
문제
어떻게 읽을 수 있습니까 하나의 캐릭터/키 콘솔에서 공격하지 않고 입력합니까?가 오래 된 항목에서는 태양의 버그 데이터베이스 다고 주장 할 수 없습니다 순수한 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
s 에 해당하는 등록된 키를 누르,구조적으로 파문을 형성 프로젝트:
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 여전히 죽이는 앱은 물론이다.)
다른 팁
에 대한 수 있습니다 사람이 이것을 읽고 2015 년 넘어,참고 최신 버전의 JLine 더 이상 방법 Terminal/getTerminal
.나는 확실히 다른(아마도 더 나은)방식으로 이렇게 지금 JLine2,하지만 당신은 항상 사용 jline "0.9.94"
고 받아들이 대답은 여전히 작동,적어도 Clojure1.6(의 참고,당신이 더 이상 필요 없을 필요로 clojure.contrib
).
에 대한 대안으로,권한 clojure-lanterna, 는 Clojure 의 래퍼 Java Lanterna 라이브러리입니다.에서 볼 수 있듯이 문서, 기 get-key
고 get-key-blocking
기능을 읽기 위해서 하나의 캐릭터의 입력이 있습니다.
jline2를 사용하려면 위에 설명 된 Michał Marczyk가 꽤 많이 설명되는 ConsoleReader
클래스가 있습니다.
(ns con.core
(:import jline.console.ConsoleReader)
(:gen-class))
(defn -main [& args]
(while true (->> (ConsoleReader.) (.readCharacter) (println))))
.