Java 控制台无法识别箭头键

Java 控制台无法识别箭头键

我的 10.04 服务器上的 Java 控制台出现了一些奇怪的问题(它实际上是 minecraft 服务器的控制台,但我相信这是一个普遍问题,而不是 minecraft 特有的问题):箭头键无法正确识别。每当在 Java 控制台中使用它们时,它们都会产生类似以下内容:

^[[A ^[[B ^[[C ^[[D

但它们在系统的其余部分运行良好。

我已经尝试过几种方法,比如检查系统区域设置或仅为 Java 设置特定区域设置,但都无济于事。您知道这背后的原因是什么吗?如何解决?

提前致谢。

编辑(10月29日): 在阅读了第一个答案并测试了几个东西之后,我对这个问题有了更多的了解。现在有一个程序在 shell 上运行,这个问题主要是由 Java 应用程序(或更具体地说是它的控制台)使用的 Java 的 jline 库的问题引起的。

为了测试目的,我从 OpenJDK6 切换到 OrcaleJDK6,问题就解决了。无法测试 OpenJDK7,因为没有 10.04 版本。我假设与 jline 存在一些联系,因为这是负责处理控制台输出和输入的库。应用程序使用的版本可能与服务器上使用的旧 OpenJDK 版本不兼容。但与我手动安装的最新版本的 oracle-java 兼容。我仍然没有弄清楚 ubuntu 的 jline-package 如何适应这种情况。对我来说,有和没有它进行测试没有区别。

如果我发现什么,我会再次编辑这篇文章。如果有人有想法,请告诉我。

答案1

某些控制台程序(可能是在 bash 顶部运行的程序,例如sh)不会抑制控制键按下,例如向上箭头或向下箭头等。在这些控制台中,您还会像您发布的那样获得按键的回声^[[A ^[[B ^[[C ^[[D。这实际上不是一个大问题。

您的默认 shell 是 ,bash它抑制箭头键的击键。与 bash 不同,shellsh不会抑制箭头键的击键。您可以通过sh在终端上运行并按下箭头键来尝试它。要退出这些控制台,您需要使用特定于程序的某些命令,大多数情况下,它是quitexit。在您的 minecraft 服务器的情况下,它将是stop

相关内容