我无法在我的 Java 命令行应用程序中捕获 <tab> 击键。使用 System.in.read() 在按 Tab 键时我似乎什么也没得到。解决这个问题的最佳方法是什么?
为了提供一些上下文,我试图让用户在命令中按 Tab 键以使其自动完成命令(就像您在 bash shell 中所做的那样)。如果有更好的方法来实现这一点,我愿意接受建议(也许使用 System.in.read() 不是解决这个问题的最佳角度?)。
我无法在我的 Java 命令行应用程序中捕获 <tab> 击键。使用 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
}
再次编辑:该库确实包含命令行的自动完成功能(通过按 Tab)...享受 :)
来自 InputStream 的数据仅在用户按下回车后才可用。我想您会发现,如果您在选项卡后按 Enter 键,该选项卡就会显示出来。
在 c 应用程序中,也有类似的情况:shell 将输入模式设置为 raw,因为它需要 raw 击键。Readline 是 Linux 中用于此目的的普通库。我不确定在 Windows 上什么是常见的。据我所知,使用 JNI 的东西是这里唯一的选择。
我猜你的 shell 正在捕获选项卡并阻止它进入你的应用程序。对此您可能无能为力...