Question

G'day tout,

J'ai un projet de console où il est prévu que l'utilisateur appuie sur les touches de direction du clavier (clavier non numérique) pour déplacer un avatar. J'éprouve des difficultés de codage pour vérifier la pression de ces touches. Dans Pascal, il était assez facile à utiliser « readkey » et le code, par exemple, pour # 80 pour la pression de touche vers le bas. Cependant, je suis perplexe comment mettre en œuvre les mêmes fonctionnalités en Java, mais je pense que je comprends l'utilisation de System.in et BufferedInputStream.

Quelqu'un pourrait-il me aider? Vos pensées ou des conseils sont très appréciés.

Était-ce utile?

La solution

La question du soutien de la console en Java est bien connu, je ne suis pas sûr que ce soit faisable.

Ce ne fut pas d'abord possible avec System.in puisqu'il travaillait basé sur la ligne.

Sun a finalement ajouté une classe java.io.Console.

Voici ses JavaDocs: http://java.sun.com/javase/ 6 / docs / api / java / io / Console.html

Une fois que vous obtenez la console (je pense à partir System.Console), vous pouvez obtenir un lecteur et peut-être lire les caractères de lui, mais je ne suis pas sûr si elle comprend des touches.

En général, vous êtes censé utiliser swing ou AWT si vous voulez accéder au clavier, ce qui est stupide.

En 2007, il y avait une demande de fonctionnalité à son sujet:

Autres conseils

Si java.io.console ne fonctionne pas pour vous (je ne l'ai pas essayé), essayez JLine . Je l'ai utilisé pour résoudre un vaguement problème similaire .

Malheureusement, ce n'est pas possible de manière portable:

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

Sous Windows, la lecture de System.in bloquera jusqu'à ce que enter est pressé, même si vous n'utilisez pas BufferedReader. Les flèches permet de faire défiler l'historique des commandes. Essayez vous-même:

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

Même problème en utilisant la classe Console (entrée en mémoire tampon sous Windows, les touches fléchées intepreted par 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);
    }
  }
}

Non avec le code Java intégré. Commander java bibliothèques ou maudit JLine comme mentionné ci-dessus, si vous voulez continuer.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top