質問

やあ、すべて、

私はユーザーがアバターを移動するには、キーボードの方向キー(非テンキー)を押した意図されたコンソールプロジェクトを持っています。私は、これらのキーの押しをチェックするためにコード化難易度を持っています。パスカルでは、例えば、#80のためのダウンキー操作のために、「readkey」とコードを使用するのは簡単でした。しかし、私は私がSystem.inとにBufferedInputStreamを使用することを理解して考えていますが、Javaで同じ機能を実装する方法を困惑しています。

誰も私を助けてもらえますか?あなたの考えやヒントがはるかに高く評価されています。

役に立ちましたか?

解決

Javaでコンソールサポートの問題は、私は、これはなんとかあることを確認していない、よく知られています。

それが動作するために使用するのでこれはSystem.inと、最初は不可能だったラインベースます。

Sunは、最終的java.io.Consoleクラスを追加します。

ここではそののJavaDocは以下のとおりです。 http://java.sun.com/javase/ 6 /ドキュメント/ API / Javaの/ IO / Console.htmlする

あなたがコンソールを取得したら、

、あなたがリーダーを取得し、おそらくそれから文字を読み取ることができます(私はSystem.consoleからだと思う)、私はそれが、キーが含まれている場合はわからない。

一般的に、あなたはあなたが愚かであるキーボード、にアクセスしたい場合はスイングやAWTを使うことになっている。

は、2007年の時点で、それについての機能要求があった:ここ

他のヒント

java.io.consoleは(私がすることを試していない)あなたのために動作しない場合は、してみてください JLine 。私は漠然と同様の問題を解決するためにそれを使用します。

残念ながら、これは、移植性のある方法では不可能である。

http://forums.sun.com/thread.jspa?threadID= 5351637&イベントID = 10526512

enterが押されるまで、

Windowsでは、System.inからの読み取りすることは、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