我无法捕捉键击在我的Java命令行应用程序。使用System.in.read()我似乎没有击中Tab键时得到任何东西。什么是处理这个?

最好的办法

要给予一定的情况下,我想允许用户按下TAB键中间命令把它自动完成的命令(就像你可能在bash shell做)。我很开放的建议,如果有更好的方法来实现这一目标(可能使用System.in.read()是不是最好的角度来处理这个?)。

有帮助吗?

解决方案

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

修改我可以证实它的工作

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

修改AGAIN:库确实包含自动完成(通过按标签)用于命令行...享受:)

其他提示

我猜你的shell是捕获标签,并防止它进入您的应用程序。可能没有什么可以做这个...

从InputStream的数据仅当用户按下输入提供。我想你会发现,如果你按选项卡后输入,标签会显示出来。

在C应用程序,有类似的东西:一个外壳熟从设定输入模式为原料,因为它需要原始击键。的Readline是在Linux中使用这种正常的库。我不知道什么是常见的Windows上。至于我能想到的,使用JNI的东西是唯一的选择这里。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top