天儿真好全部

我如果打算用户按下键盘的方向键(非数字键盘)到移动化身一个控制台项目。我有困难的编码,以检查这些键的按下。在帕斯卡尔很容易就够用了“readkey”和代码,例如,用于#80向下按键。不过,我难倒了如何在Java中实现相同的功能,但我想我明白使用System.in和的BufferedInputStream的。

任何人都可以帮我吗?你的想法或暗示的赞赏。

有帮助吗?

解决方案

Java中的控制台支持问题是众所周知的,我不知道这是可行的。

这是最初没有与可能的,因为System.in它用来工作的基于行的。

孙最终加入java.io.Console类。

下面是它的JavaDoc: http://java.sun.com/javase/ 6 /文档/ API / JAVA / IO / Console.html

一旦你的控制台(我觉得从System.console),你可以得到一个读者,也许从中读取字符,但我不知道这是否包括键。

一般情况下,你应该,如果你想进入键盘,这是愚蠢的使用Swing或AWT。

截至2007年,有一个关于它的特征请求:此处

其他提示

如果java.io.console不适合你的工作(我还没有尝试过),请尝试的JLine 。我用它来解决一个依稀类似的问题

不幸的是,这是不可能的在便携式方式:

http://forums.sun.com/thread.jspa?threadID= 5351637&MESSAGEID = 10526512

在Windows中,从System.in读取将阻塞,直到enter被按下,即使你不使用BufferedReader。箭通过命令的历史周期。自己尝试一下:

import java.io.*;
public class KeyTest {
  public static void main(String[] argv) {
    try {
      InputStreamReader unbuffered = new InputStreamReader(System.in);
      for (int i = 0; i < 10; ++i) {
        int x = unbuffered.read();
        System.out.println(String.format("%08x", x));
      }
    } catch (Exception e) {
      System.err.println(e);
    }
  }
}

使用Console类相同的问题(输入Windows下缓冲,由Windows intepreted箭头键):

import java.io.*;
public class KeyTest2 {
  public static void main(String[] argv) {
    try {
      Console cons = System.console();
      if (cons != null) {
        Reader unbuffered = cons.reader();
        for (int i = 0; i < 10; ++i ) {
          int x = unbuffered.read();
          System.out.println(String.format("%08x", x));
        }
      }
    } catch (Exception e) {
      System.err.println(e);
    }
  }
}

不具有内置的Java代码。看看java的诅咒库或的JLine如上面提到的,如果你想继续。

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