如何使用java在控制台窗口中实现基本的箭头键移动?

Tho*_*sen 7 java console-application direction arrow-keys

我正在努力寻找一种在控制台窗口中实现基本箭头键移动的方法.我遇到过一个只使用switch语句和一些变量的C#脚本,但我的老师坚持使用Java.

从其他一些主题来看,答案似乎都说在Java中是不可能的,除非你安装了某些(如果我错了,请纠正我)"框架",如JNA和/或Jline,但作为一个初学者,我不知道那些东西甚至是什么意思.

现在在你说我的老师是一个白痴,因为我认为我们可以做到这一点,他从来没有说过它必须是箭头键运动,我只是觉得它很酷:)

Fel*_*old 4

这比看起来更困难,主要是因为 Java 跨平台的工作方式。从键盘读取的基本解决方案是使用 stdin,如下所示:

    InputStream in = System.in;

    int next = 0;
    do {
        next = in.read();
        System.out.println("Got " + next);
    } while (next != -1);
Run Code Online (Sandbox Code Playgroud)

现在,有两个问题:

  1. 在unix平台上,这不会在按下时打印下一个字符,而是仅在按下return后打印,因为操作系统默认缓冲输入
  2. 箭头键没有 ascii 代码,而是有所谓的转义序列,具体取决于所使用的终端模拟器,因此在我的 Mac 上,如果我运行上面的代码并按向上箭头,然后按返回键,我会得到以下输出:

    Got 27 // escape
    Got 91
    Got 65
    Got 10 // newline
    
    Run Code Online (Sandbox Code Playgroud)

没有好的独立于平台的方法可以解决这个问题,如果您只针对 unix 平台,javacurses可能会有所帮助。