在Java中,捕获<tab>击键的最佳方法是什么?</tab>

时间:2011-01-05 20:27:43

标签: java keystrokes

我无法捕捉&lt; tab&gt;我的Java命令行应用程序中的击键。使用System.in.read()我在点击Tab键时似乎没有得到任何东西。解决这个问题的最佳方式是什么?

为了给出一些上下文,我试图允许用户点击tab键命令,让它自动完成命令(就像你在bash shell中做的那样)。如果有更好的方法来实现这一点,我愿意接受建议(也许使用System.in.read()不是解决这个问题的最佳方法吗?)。

3 个答案:

答案 0 :(得分:7)

看看JLine。我自己没有用过它。它使用Windows DLL(使用JNI)并且它支持linux以将控制台切换到字符/原始模式而不是缓冲模式。我以前从未使用过这个,所以使用风险自负。我也不是100%确定它是否会解决你的问题,但值得一试:)

编辑:我可以确认它确实有效

ConsoleReader cr = new ConsoleReader();
while (cr.readVirtualKey() != 0x09){
  //loop till Tab is pressed
}

再次编辑:该库确实包含命令行的自动填充功能(通过按Tab键)...享受:)

答案 1 :(得分:0)

我猜你的shell正在捕获标签并阻止它进入你的应用程序。你可能无法做到这一点......

答案 2 :(得分:0)

只有当用户按下回车键时,才能使用InputStream中的数据。我想你会发现,如果你按标签后输入,标签就会出现。

在c应用程序中,有类似的东西:shell将输入模式设置为raw来自raw,因为它需要原始击键。 Readline是Linux中用于此的常规库。我不确定Windows上常见的是什么。据我所知,使用JNI的东西是唯一的选择。