Duvida Java Swing

5 respostas
F

Boa tarde! Estou desenvolvendo um jogo em “java swing” e começou a surgir alguns problemas que não tenho muita ideia do que podem estar causando.
Acontece que as vezes quando “compilo” o programa(Estou usando Eclipse como IDE) as vezes gera uma tela sem que nada seja desenhado e as vezes tudo é desenhado normalmente.
Quando nada é desenhado se eu minimizar a tela e maximizar de novo, o programa desenha tudo normalmente. Só que o teclado não funciona, mas o Mouse funciona normalmente.

Obs: Não mexi em nenhum trecho de codigo e os dois comportamentos podem ocorrer de forma aleatória.

Algumas informações sobre o programa que considero relevante:
-Não estou usando nenhum método para Threads.
-A função de desenhar é o paintComponent e deixo ele atualizar a tela sozinho.
-O problema começou recentemente, mas estou desenhando varias camadas, uma em cima da outra; acredito que o programa esteja mais pesado por isso.
-As imagens são todas desenhadas a partir de arquivos ‘.png’.

Alguém tem alguma ideia do que pode estar ocorrendo?

Agradeço a atenção,

Fernando B

5 Respostas

ViniGodoy

Como você controla seu gameloop?

F

a logica e a renderização são chamadas no “paintComponent” de uma classe que estende o JPanel.

ViniGodoy

Estou falando do while, que comanda várias vezes o desenho. Você pode postar algum código? Fica difícil te ajudar só imaginando o que você tenha feito.

F

Consegui resolver! Obrigado pela atenção.

O problema era que eu chamava no JFrame “setVisible(true);”.
Só que na Main eu dava “add”, adicionando um JPanel no Jframe.

Resolvi apenas adicionando o JPanel antes de chamar setVisible(true).

Parece que dava certo por questões de thread que não conheço a fundo, pois tem pouco tempo que passei a programa em java, costumava programar em C.

ViniGodoy

Nunca chame o setVisible true no construtor da sua janela. Não é correto tornar visível uma janela que não terminou de ser construída ainda.
Ele deveria ser chamado fora, na hora de instanciar a janela.

Criado 17 de fevereiro de 2015
Ultima resposta 18 de fev. de 2015
Respostas 5
Participantes 2