如何使用JLine编写等效的KeyListener?

时间:2013-06-13 14:22:38

标签: java console jline

我正在研究用Java编写的控制台应用程序。我要做的是处理用户键盘输入。当我们在终端中使用我们的程序启动一个漫长的过程时,用户必须可以随时按'q'来停止该过程(在单独的线程上运行)。

我尝试了几件事:

  • 在另一个不同的线程中运行,读取用户输入并向进程'thread
  • 抛出InterruptedException
  • 使用JLine及其ConsoleReader
  • 使用JLine并添加链接到键盘键的TriggeredAction

但每次,我都面临同样的问题:用户必须按ENTER键,我不希望这样。

如果您有任何想法或我问题的实际解决方案,请感谢您的帮助。

PS:请你,如果你认为这是不可能的,请不要回答。我知道这是可能的。

2 个答案:

答案 0 :(得分:1)

也许你可以使用其中一个库,

http://sourceforge.net/projects/jxgrabkey/ for linux

对于Windows

https://code.google.com/p/jintellitype/

与您的问题关联不多,但我认为可以帮到您,

http://sourceforge.net/projects/javacurses/

所有这一切的问题在于你将失去平台独立性。

答案 1 :(得分:1)

为避免用户按下Enter键并能够直接响应按键,我们可以通过以下方式使用jline3,其中,我们首先将终端更改为原始模式以直接响应按键,然后等待下一个输入的字符。

var terminal = TerminalBuilder.terminal()
terminal.enterRawMode()
var reader = terminal.reader()

var c = reader.read()
<dependency>
    <groupId>org.jline</groupId>
    <artifactId>jline</artifactId>
    <version>3.12.3</version>
</dependency>