NullPointerException em Graphics no java

8 respostas
ICL.dev

Olá, estou tendo alguns poblemas com o Graphics do AWT.
Esta NullPointer, esta causando "flicagem" no Jogo.

![image|598x500](upload://3arYlzPn7SO65R3ZQhgChLwoeMi.png)

[code]
private BufferStrategy bs;
private void render() {
bs = display.canvas.getBufferStrategy();
if(bs == null){
display.canvas.createBufferStrategy(3);
return;
}
g = bs.getDrawGraphics();
//Clear Screen
g.clearRect(0, 0, display.getWidth(), display.getHeight());
//Draw Here!

if(currentScene != null)
currentScene.render(g);

//End Drawing!
bs.show();
g.dispose();
}
[code]

8 Respostas

staroski

Provavelmente no método render da classe Menu você está chamando o drawString passando uma referência null.

ICL.dev

Negativo,
image
Esse null, é do ImageObserver, que não tem praticamente nada a ver…

staroski

Não poste imagens, poste o código puro e formate com o botão “</>” do fórum.

Seu StackTrace diz que o NullPointerException está acontecendo na linha 42 do arquivo Menu.java.
Precisamente dentro do método render e a exceção acontece ao chamar o método drawString.

Das duas uma:

  • Você não recompilou seu código e está executando .class obsoleto;
  • Você postou no fórum um código diferente do código que realmente implementou.
ICL.dev

Não, a relalidade o codigo que eu postei currentScene.render(g); é na minha Classe principal, a classe Game,
o codigo que eu postei depois, é o metodo que a classe principal chama.
E Sim, eu ja recompilei porém o poblema continua.
em outro projeto porém com o mesmo codigo, em outro workspace o poblema não apareceu.

staroski

O StackTrace está claro, o NPE acontece no método render da classe Menu.

Outra coisa, vi que há várias exceções sendo lançadas por diferentes Threads.

Porque você tem várias Threads desenhando no mesmo Graphics?

Tira aquela chamada ao dispose() do Graphics, provavelmente alguma dessas suas Threads está tentando desenhar depois de tu ter feito o dispose.

Da uma revisada nesse teu jogo.

Eu costumo ter só duas Threads quando faço jogos:

  • a thread principal do programa
  • a thread do game loop
ICL.dev

Narealidade, o jogo possui apenas uma thread.
e eu descontinuei o projeto.

Percebi que a ideia não ia dar certo.
e quando eu removi o dispose o Stacktrace aparecia da mesma forma…

Obrigado por ajudar.

staroski

O StackTrace que você postou tinha exceções na Thread-28, Thread-31 e Thread-32.
:wink:

ICL.dev

Eu olhei hoje o projeto, e descobri o porque,
Acontece, que no metodo “run” eu acabei colocando para ele chamar o metodo start(), iniciando outra thread. esse é o motivo da exceção…

Criado 7 de julho de 2020
Ultima resposta 12 de jul. de 2020
Respostas 8
Participantes 2