문제

어떻게 읽을 수 있습니까 하나의 캐릭터/키 콘솔에서 공격하지 않고 입력합니까?가 오래 된 항목에서는 태양의 버그 데이터베이스 다고 주장 할 수 없습니다 순수한 java.내가 찾는 이러한 접근법

제가 기대하게 하나를 추가 magic-readkey.jar 내 클래스 경로,그리고 몇 줄의 코드,아 (def just-hit (com.acme.MagicConsole/read-char)).

도움이 되었습니까?

해결책

여기에는"즉각적인 에코"응용 프로그램을 사용하여 JLine 는 인쇄 ints 에 해당하는 등록된 키를 누르,구조적으로 파문을 형성 프로젝트:

  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 여전히 죽이는 앱은 물론이다.)

다른 팁

에 대한 수 있습니다 사람이 이것을 읽고 2015 년 넘어,참고 최신 버전의 JLine 더 이상 방법 Terminal/getTerminal.나는 확실히 다른(아마도 더 나은)방식으로 이렇게 지금 JLine2,하지만 당신은 항상 사용 jline "0.9.94" 고 받아들이 대답은 여전히 작동,적어도 Clojure1.6(의 참고,당신이 더 이상 필요 없을 필요로 clojure.contrib).

에 대한 대안으로,권한 clojure-lanterna, 는 Clojure 의 래퍼 Java Lanterna 라이브러리입니다.에서 볼 수 있듯이 문서, 기 get-keyget-key-blocking 기능을 읽기 위해서 하나의 캐릭터의 입력이 있습니다.

jline2를 사용하려면 위에 설명 된 Michał Marczyk가 꽤 많이 설명되는 ConsoleReader 클래스가 있습니다.

(ns con.core
  (:import jline.console.ConsoleReader)
  (:gen-class))


(defn -main [& args]
  (while true (->> (ConsoleReader.) (.readCharacter) (println))))
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top