Imprimo o keyCode mas não associo a variável (NullPointerException) - (Resolvido)

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:

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…