O console Java não reconhece as teclas de seta

3

Eu tenho alguns problemas estranhos com um console java no meu servidor 10.04 (na verdade é o console de um minecraft-server, mas acredito que é um problema geral e não algo específico de minecraft): as teclas de seta não são reconhecidas corretamente. Sempre que eles são usados dentro do console java, eles produzem algo assim:

^[[A ^[[B ^[[C ^[[D

Eles funcionam bem no resto do sistema.

Já experimentei várias coisas, como a verificação de localidades do sistema ou a definição de locais específicos apenas para o java, mas sem qualquer sorte. Alguma idéia de qual é a razão por trás disso e como ela pode ser corrigida?

Obrigado antecipadamente.

edit (29/10): Depois de ler a primeira resposta e testar várias coisas, descobri mais sobre esse assunto. Existe agora um programa rodando sobre o shell, o problema é causado principalmente por problemas com a biblioteca jline do java que é usada pelo aplicativo java (ou seu console, para ser mais específico).

Para fins de teste, mudei de OpenJDK6 para OrcaleJDK6 e o problema desapareceu. Teste OpenJDK7 não é possível, pois não há versão para 10.04. Eu assumo algumas conexões com o jline, já que esta é a biblioteca responsável por manipular a entrada e a saída do console. Provavelmente, a versão usada pelo aplicativo é de alguma forma incompatível com a versão mais antiga do OpenJDK usada no servidor. Mas compatível com a versão mais atualizada do oracle-java que eu instalei manualmente. Eu ainda não descobri como o pacote jline do ubuntu se encaixa nessa imagem. Para mim não há diferença entre testar com e sem ele.

Editará este post novamente se eu descobrir algo. Se alguém tiver uma ideia, por favor me avise.

    
por thee 13.10.2012 / 22:36

1 resposta

0

Alguns programas de console (pode ser um programa rodando na parte superior do bash, como sh ) não suprimem as teclas de controle pressionadas, como seta para cima ou para baixo arrow etc. Nesses consoles, Você também obterá o eco das teclas pressionadas, como você postou ^[[A ^[[B ^[[C ^[[D . Não é um grande problema, na verdade.

Seu shell padrão é bash , o que suprime os toques das teclas de seta. Ao contrário do bash, o shell sh não suprime os traços da tecla de seta. Você pode tentar executando sh em um terminal e pressionando as teclas de seta. Para sair desses consoles, você precisa usar determinado comando específico para os programas. Na maioria das vezes, ele é quit ou exit . No seu caso de um servidor de minecraft, seria stop .

por Anwar 14.10.2012 / 21:17