Pergunta

Estou tendo problemas para capturar ou003Ctab> Tecla no meu aplicativo de linha de comando Java. Usando o System.in.read () Parece que não tenho nada ao atingir a tecla de guia. Qual é a melhor maneira de abordar isso?

Para dar algum contexto, estou tentando permitir que um usuário atinja a tecla TAB no meio do comando para que ela preencha o comando automaticamente (assim como você pode fazer em um shell de festa). Estou aberto a sugestões se houver melhores abordagens para conseguir isso (talvez usando o system.in.read () não é o melhor ângulo para abordar isso?).

Foi útil?

Solução

Dê uma olhada em Jline. Eu não usei sozinho. Ele usa uma DLL do Windows (usando JNI) e possui suporte ao Linux para alternar o console para o modo de caractere/bruto em vez do modo buffer. Eu nunca usei isso antes, então uso por sua conta e risco. Também não tenho 100% de certeza se isso abordará seu problema, mas vale a pena tentar :)

EDITAR: Eu posso confirmar que funciona

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

Editar novamente: A biblioteca contém preenchimento automático (pressionando a guia) para a linha de comando ... aproveite :)

Outras dicas

Eu acho que seu shell está capturando a guia e impedindo que ela chegue ao seu aplicativo. Pode não haver nada que você possa fazer sobre isso ...

Os dados de um InputStream são disponibilizados apenas quando o usuário pressionou Enter. Eu acho que você descobrirá que, se pressionar Enter após a guia, a guia será exibida.

Em C Applications, há algo semelhante: um shell define o modo de entrada para RAW a partir de cozido, pois precisa das teclas cruas. ReadLine é a biblioteca normal usada para isso no Linux. Não tenho certeza do que é comum no Windows. Tanto quanto posso pensar, algo usando o JNI é a única opção aqui.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top