Estou com um problema com o seguinte código :
[code]public void run() {
while (true) { // loop do jogo para sempre
if (rodando) {
bola.moveBola(); // Chama para mover a bola
repaint(); // Pede para repitar a bola
try { // Inicia o tratamento de evento(erro)
Thread.sleep(tempoEspera);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}[/code]
preciso criar um metodo que pare a run mas que possa voltar a roda-la
Pedro Medina
[code]public void run() {
while (true) { // loop do jogo para sempre
if (rodando) {
bola.moveBola(); // Chama para mover a bola
repaint(); // Pede para repitar a bola
try { // Inicia o tratamento de evento(erro)
Thread.sleep(tempoEspera);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
else if(rodando==false){
repaint();
}
}
} [/code]
E so criar um else if pra apenas repintar a bolinha no mesmo lugar infinitamente
E la no Evento é so mudar de true pra false e de false true (dependendo de pausar ou começar)
poderia tb ser SuaThread.supend()
supend() é um erro de compilação, e suspend(), se não me engano, gera uma exceçao de “operaçao não implementada”. Suspender uma thread não quer dizer encerrá-la, mas sim somente paralisá-la - isso é suportado em alguns sistemas operacionais. É igual quando você recebe uma suspensão na escola - você não foi expulso (Thread.stop) mas sim só vai ter de faltar a algumas aulas (Thread.suspend).
Dependendo do que você pode fazer, pode usar o método Thread.interrupt(), que irá fazer com que a thread receba uma exceçao do tipo “InterruptedException”. O problema dessa exceção é que ela não funciona muito bem - por exemplo, digamos que você queira interromper uma operaçao lenta de leitura ou escrita de arquivos que está parada no sistema operacional Windows. A exceção provavelmente só vai ser tratada em outro ponto, não durante a operação de leitura ou escrita.
De qualquer forma, a maior parte das tasks e outras coisas que encapsulam threads que podem ser interrompidas (ou canceladas) no pacote java.util.concurrent usa o esquema de Thread.interrupt ou então checar uma flag.
mas se o cara fizer assim:
while (supended){}
resolve, mas não vai haver um desperdício de processamento?
já percebi q se fizer assim:
while (supended){THread.Sleep();}
o uso do processador é mt inferior. mas o q é feito no interior do sleep? pra q não consuma processamento? baixa a prioridade?
Thread.sleep chama a API do sistema operacional que faz a thread dormir por um determinado período de tempo (por exemplo, no Windows é chamada a API “Sleep” e no Linux é chamada a API “sleep”.
Isso quer dizer que a CPU está livre para usar esse tempo para qualquer outra coisa, como rodar outra thread, ou então até mesmo “dormir” (ou seja, entrar em um estado em que a CPU realmente não processa quase nada e praticamente não gasta energia).
A prioridade não é afetada nesse caso.