首页 > 解决方案 > 从 Java 中的 ANSI 转义码获取响应

问题描述

我想用 ANSI 转义码获取终端的位置\033[6n。我这样做很简单:

System.out.print("\033[6n");

这将做出响应,就像[[33;225R在标准输入中一样。我如何得到这个回复?我试过System.in.read()了,但这会等待用户按 Enter,这是我不想要的。

标签: javastdin

解决方案


在 Unix 系统上使用:

Runtime.getRuntime().exec(new String[] { "/bin/sh", "-c", "stty raw -echo </dev/tty" }).waitFor();

System.out.print("\033[6n");

Reader inputReader = System.console().reader();
int byteBuffer;
StringBuilder buffer = new StringBuilder();
while ((byteBuffer = inputReader.read()) > -1) {
    if (byteBuffer == 3) {
        break;
    } else if (byteBuffer == 27) {
        buffer.append("\\033");
    } else {
        buffer.append((char)byteBuffer);
        if ('R' == byteBuffer) {
            break;
        }
    }
}
Runtime.getRuntime().exec(new String[] { "/bin/sh", "-c", "stty -raw echo </dev/tty" }).waitFor();

System.out.println("Input: " + buffer);

推荐阅读