Domanda

Ho problemi catturando l' battitura nella mia applicazione a riga di comando Java. Utilizzando System.in.read () non mi sembrano avere nulla quando premendo il tasto tab. Qual è il modo migliore per affrontare questo?

Per dare un po 'di contesto, sto cercando di consentire a un utente di colpire la metà di comando tasto tab per averlo completamento automatico il comando (molto simile si potrebbe fare in una shell bash). Sono aperto a suggerimenti se ci sono meglio approcci al raggiungimento di questo (magari utilizzando System.in.read () non è la migliore angolazione per avvicinarsi a questo?).

È stato utile?

Soluzione

Dai un'occhiata alla JLine . Non ho usato io stesso. Esso utilizza un finestre DLL (utilizzando JNI) e possiede supporto Linux per passare la console alla modalità caratteri / raw anziché modalità bufferizzata. Non ho mai usato prima in modo da utilizzare a proprio rischio. Sono, inoltre, non sicuro al 100% se si affronterà il problema, ma vale la pena un colpo:)

Modifica Posso confermare che funziona

ConsoleReader cr = new ConsoleReader();
while (cr.readVirtualKey() != 0x09){
  //loop till Tab is pressed
}

EDIT AGAIN: La biblioteca contiene completamento automatico (da scheda premendo) per la linea di comando ... Enjoy:)

Altri suggerimenti

Direi che la shell è scheda cattura e impedendole di raggiungere la vostra applicazione. Non ci può essere qualsiasi cosa si può fare su questo ...

I dati da un InputStream è reso disponibile solo quando l'utente ha premuto invio. Penso che troverete che se si preme entrare dopo scheda, la scheda verrà visualizzato.

Nelle applicazioni c, c'è qualcosa di simile: un guscio imposta la modalità di ingresso grezza dalla cotta, in quanto deve i tasti prime. Readline è la libreria normale utilizzato per questo in Linux. Non sono sicuro di ciò che è comune su Windows. Per quanto mi viene in mente, qualcosa usando JNI è l'unica opzione qui.

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