我无法捕捉< tab>我的Java命令行应用程序中的击键。使用System.in.read()我在点击Tab键时似乎没有得到任何东西。解决这个问题的最佳方式是什么?
为了给出一些上下文,我试图允许用户点击tab键命令,让它自动完成命令(就像你在bash shell中做的那样)。如果有更好的方法来实现这一点,我愿意接受建议(也许使用System.in.read()不是解决这个问题的最佳方法吗?)。
答案 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的东西是唯一的选择。