Parar metodo run();

7 respostas
P
Estou com um problema com o seguinte código :
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();
				}
			}

		}

	}
preciso criar um metodo que pare a run mas que possa voltar a roda-la

Pedro Medina

7 Respostas

B
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();	
	}
     }  
  
}

E so criar um else if pra apenas repintar a bolinha no mesmo lugar infinitamente

B

E la no Evento é so mudar de true pra false e de false true (dependendo de pausar ou começar)

P

Muito Obrigado

G

poderia tb ser SuaThread.supend()

E

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.

G

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?

E

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.

Criado 1 de agosto de 2012
Ultima resposta 2 de ago. de 2012
Respostas 7
Participantes 4