3

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

我尝试了几件事:

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

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

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

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

4

2 回答 2

1

也许您可以使用这些库之一,

http://sourceforge.net/projects/jxgrabkey/用于 Linux

https://code.google.com/p/jintellitype/适用于 Windows

与你的问题关系不大,但我认为可以帮助你,

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

所有这一切的问题是您将失去平台独立性。

于 2013-06-13T15:14:12.210 回答
1

To avoid having the user press enter and to be able to directly respond to a keypress, we can make use of jline3 in the following way, wherein we first change the terminal into rawmode to directly respond to keys, and then wait for the next entered character.

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>
于 2020-01-05T17:58:43.090 回答