Domanda

Buongiorno tutti,

Ho un progetto console in cui sono destinati, l'utente preme i tasti di direzione della tastiera (tastiera non numerico) per spostare un avatar. Sto avendo difficoltà di codifica per verificare la pressione di questi tasti. In Pascal è stato abbastanza facile da usare "ReadKey" e il codice, ad esempio, per il # 80 per la pressione del tasto giù. Tuttavia, Stumped come implementare la stessa funzionalità in Java, anche se credo di aver capito l'uso di System.in e BufferedInputStream.

Qualcuno potrebbe darmi una mano? I vostri pensieri o suggerimenti sono molto apprezzati.

È stato utile?

Soluzione

Il problema di supporto Console in Java è ben noto, non sono sicuro che questo è fattibile.

Questo non è stato inizialmente possibile con System.in in quanto è abituato a lavorare line-based.

Sun alla fine ha aggiunto una classe java.io.Console.

Ecco le sue JavaDocs: http://java.sun.com/javase/ 6 / docs / api / java / io / Console.html

Una volta che la console (credo da System.Console), è possibile ottenere un lettore e, forse, leggere caratteri da esso, ma non sono sicuro se include chiavi.

In generale, si suppone di utilizzare swing o AWT se si vuole accedere alla tastiera, che è stupido.

A partire dal 2007, c'è stata una richiesta di funzionalità su di esso: qui

Altri suggerimenti

Se java.io.console non funziona per voi (non ho provato), prova a JLine . L'ho usato per risolvere un vagamente simile problema .

Purtroppo questo non è possibile in un modo portabile:

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

In Windows, la lettura da System.in bloccherà fino a quando non viene premuto enter, anche quando non si utilizza un BufferedReader. Frecce scorrere la cronologia dei comandi. Provate voi stessi:

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

Lo stesso problema utilizzando la classe Console (ingresso tamponata in ambiente Windows, i tasti freccia interpretate da 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 con built-in codice Java. Partenza java maledice biblioteche o JLine come detto sopra, se si desidera continuare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top