Parar metodo run();

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)

Muito Obrigado

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.