Olá!
Está acontecendo um comportamento estranho com uma janela que criei no java.
Ao aparecer na tela, algumas vezes ela simplesmente não responde a nenhuma ação (não fecha nem reconhece o KeyListener), depois de uns 15 segundos ela volta ao normal.
Bem, os listeners não são necessários, pois citei eles só para exemplificar,
eu estou reportando um comportamento estranho da janela que ao ser iniciada, demora cerca de 15 segundos antes de começar a responder alguma entrada.
teste.rar (10,9 KB)
Tem aí um programa que reproduz o mesmo comportamento, junto com o código-fonte.
Execute o programa algumas e vezes e tente fechá-lo imediatamente, se o problema for no código com eu acho, a janela vai demorar fechar.
Então, em minha máquina funciona normalmente consigo fechar a janela imediatamente após ela aparecer.
Entretanto receio que o problema esteja na implementação do método Game.run():
public void run() {
running = true;
load();
long nano = System.nanoTime();
while (running) {
while (System.nanoTime() > nano) {
update();
nano += 20_000_000;
}
render();
}
unload();
}
Como você tem um laço que fica constantemente processando algo sem ceder uma fatia de tempo para outros processos, pode acontecer da sua janela “congelar” por alguns instantes, mas isso pode variar de máquina para máquina.
Se eu fosse você faria o código do run ser executado em uma Thread separada e incluiria chamadas ao Thread.yield() dentro do laço, assim:
public void run() {
if (running) {
return;
}
running = true;
Thread thread = new Thread(new Runnable() {
public void run() {
load();
long nano = System.nanoTime();
while (running) {
while (System.nanoTime() > nano) {
update();
nano += 20_000_000;
Thread.yield();
}
render();
Thread.yield();
}
unload();
}
}, "Game Loop");
thread.start();
}