Bom dia amigos. Porque a saída do keyCode funciona mas a atribuição do valor à variável gera NullPointerException?
public void display(KeyEvent e){
System.out.println("keycode" + e.getKeyCode());
int valor = keyCodes.get(e.getKeyCode());
// nullPointerException
Porque a variável “keyCodes” é nula. Dê uma olhada com um depurador ou faça isto antes da atribuição:
System.out.println(keyCodes);
Cara eu tô nesta briga toda com o keycode pelo seguinte: eu preciso pegar a tecla digitada que é associada a um valor de array e MAP. Números e letras eu pego direitinho. O problema é quando eu digito algum outro caracter (, . ; / ~). Aí dá NullPointerException na linha que eu atribuo à variável valor. O getKeyText() funciona para letras e números mas não funciona para caracteres? Qual seria a solução para pegar qualquer caracter então?
public void display(KeyEvent e){
System.out.println("keycode" + e.getKeyCode());
int valor = keyCodes.get(KeyEvent.getKeyText(e.getKeyCode()));
Mudei o título porque percebi que ele não estava condizente com a real dúvida…
Tente fazer o seguinte (não sei se te atende):
public void display(KeyEvent e){
System.out.println("keycode" + e.getKeyCode());
char valor = e.getKeyChar(); // pode imprimir onde precisar
Se não te atender, descreva um pouco mais a sua necessidade. ![:slight_smile: :slight_smile:](https://www.guj.com.br/images/emoji/twitter/slight_smile.png?v=9)
Eu tô achando que o erro está em outro lugar. Acho que pode estar no meu MAP. Ele está sssim:
Map<String, Integer> keyCodes = new HashMap<String, Integer>();
...
keyCodes.put("W", 32);
keyCodes.put("X", 33);
keyCodes.put("Y", 34);
keyCodes.put("Z", 35);
keyCodes.put("/", 36);
keyCodes.put("*", 37);
...
Funciona direitinho para os números e letras, mas para os outros cacteres dá erro, como se não achasse a relação no mapa. O mapeamento com estes outros caracteres tem algo de diferente? Pode ser isto mesmo?
Imprime a saída do getKeyText no System.out.println, é a forma mais rápida de descobrir, mas mesmo que isso funcionar esse código vai ficar estranho, qual o motivo de precisar desses keyCodes específicos? fazer um map de int para int recuperando getKeyCode diretamente é muito mais seguro… pois pode usar como chave as constantes VK_* da classe KeyEvent.
A saída imprime belezinha. Eu preciso da cada keyCode específico pq preciso colorir cada tecla qdo pressionada. Aí eu passo o índice correspondente do array para outro método que procede a lógica…
A saída imprime belezinha. Eu preciso da cada keyCode específico pq preciso colorir cada tecla qdo pressionada. Aí eu passo o índice correspondente do array para outro método que procede a lógica…
esse outro método também é desenvolvido por você? imagino que deve ter um switch case, polimorfismo ou vários if’s neste método, certo?
Resolvido com a dica do VK. Muito obrigado a todos…