Pregunta

Estoy teniendo problemas para captar la pulsación de tecla en mi solicitud de línea de comandos de Java. Usando System.in.read () Me parece que no hacer nada al golpear la tecla de tabulación. ¿Cuál es la mejor manera de abordar esto?

Para darle un poco de contexto, que estoy tratando de permitir a un usuario para golpear la mitad de comando de tecla de tabulación para que se autocomplete el comando (al igual que lo podría hacer en un intérprete de comandos bash). Estoy abierto a sugerencias si hay mejores enfoques para lograr esto (tal vez usando System.in.read () no es el mejor ángulo para acercarse a este?).

¿Fue útil?

Solución

Tener un vistazo a JLine . No he utilizado yo mismo. Se utiliza un archivo DLL de Windows (usando JNI) y cuenta con el soporte de Linux para cambiar la consola a modo de caracteres / prima en lugar de modo de buffer. Nunca he utilizado esto antes, así utilizar a su propio riesgo. Tampoco estoy 100% seguro si va a abordar el problema, pero vale la pena un tiro:)

EDIT: puedo confirmar que funciona

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

nuevo EDIT: La biblioteca contiene autocompletar (presionando TAB) para la línea de comandos ... Disfrute:)

Otros consejos

Me imagino que su cáscara es la captura de pestaña y evitando que llegue a su aplicación. Puede que no haya nada que pueda hacer al respecto ...

Los datos de un InputStream solamente está disponible cuando el usuario ha pulsado entrar. Creo que usted encontrará que si presiona entrar después de pestaña, la pestaña se mostrará.

En aplicaciones C, hay algo similar: una concha establece el modo de entrada en bruto de cocinado, ya que necesita las pulsaciones de teclas primas. Readline es la biblioteca normal utilizado para esto en Linux. No estoy seguro de lo que es común en Windows. Por lo que yo puedo pensar, algo utilizando JNI es la única opción aquí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top