Frage

G'day alle,

Ich habe eine Konsole Projekt, bei dem es dem Benutzer sollte die Tastatur Richtungstasten drückt (nicht-numerische Tastatur), um einen Avatar zu bewegen. Ich habe Schwierigkeiten Codierung für die Presse dieser Schlüssel zu überprüfen. In Pascal war es einfach genug „readkey“ und Code, zum Beispiel zu verwenden, # 80 für den nach unten keypress. Allerdings bin ich ratlos, wie die gleiche Funktionalität in Java zu implementieren, obwohl ich glaube, ich verstehe die Verwendung von System.in und BufferedInputStream.

Kann jemand mir helfen? Ihre Gedanken oder Hinweise werden sehr geschätzt.

War es hilfreich?

Lösung

Die Konsole Support-Problem in Java ist bekannt, ich bin nicht sicher, dass dies machbar ist.

Das mit System.in zunächst nicht möglich war, da sie zur Arbeit Linie basiert.

Sun hinzugefügt schließlich eine java.io.Console Klasse.

Hier sind seine JavaDocs: http://java.sun.com/javase/ 6 / docs / api / java / io / Console.html

Wenn Sie die Konsole bekommen (ich glaube, von System.Console), können Sie einen Leser bekommen und vielleicht Zeichen von ihm gelesen, aber ich bin mir nicht sicher, ob es enthält Tasten.

Im Allgemeinen sollen Sie Schaukel oder AWT verwenden, wenn Sie Zugriff auf die Tastatur wollen, die dumm ist.

Ab 2007 gab es eine Feature-Anfrage Informationen: hier

Andere Tipps

Wenn java.io.console nicht für Sie arbeiten (ich habe nicht versucht, dass), versuchen jline . Ich benutzte es, eine vage ähnliches Problem zu lösen.

Leider ist dies nicht möglich, in einer tragbaren Weise:

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

Unter Windows von System.in Lesen wird blockiert, bis enter gedrückt wird, auch wenn Sie keinen BufferedReader verwenden. Pfeile radeln durch die Befehls Geschichte. Versuchen Sie es selbst:

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);
    }
  }
}

Die gleiche Problem mit der Console Klasse (Eingang unter Windows gepuffert, Pfeiltasten interpretiert wird von Windows):

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);
    }
  }
}

Nicht mit integriertem Java-Code. Check out java Flüche Bibliotheken oder jline, wie oben erwähnt, wenn Sie den Vorgang fortsetzen möchten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top